教你如何配置Spring Boot的properties文件

来源:互联网 发布:php 发邮件类 编辑:程序博客网 时间:2024/06/05 21:59

引言

最近在构建Spring Boot的应用时很困惑,不知道该如何配置application.properties或application.yml文件。于是在网上搜别人做的demo,结果peoperties文件配置不尽相同,不知道哪个是对的,为什么要这样配置。今天看了Spring官网文档上对Common Application Properties的说明,才对这些配置有了大概的了解。特分享出来供大家参考和学习。下面以基于Spring Boot的Spring Data Jpa为例。

配置示例

下面是application.yml文件,经测试可成功运行:

spring:  datasource:    url: jdbc:mysql://localhost:3306/dave    driver-class-name: com.mysql.jdbc.Driver    usernname: root    password:  jpa:    hibernate:#      dialect: org.hibernate.dialect.MySQLDialect    ddl-auto: update    naming-strategy: org.hibernate.cfg.ImprovedNamingStrategy    show-sql: true
为什么要这样配置,先让我们来看一下Spring提供的参考文档:

1. spring.datasource参考配置:

# DATASOURCE (DataSourceAutoConfiguration & DataSourceProperties)spring.datasource.continue-on-error=false # Do not stop if an error occurs while initializing the database.spring.datasource.data= # Data (DML) script resource references.spring.datasource.data-username= # User of the database to execute DML scripts (if different).spring.datasource.data-password= # Password of the database to execute DML scripts (if different).spring.datasource.dbcp2.*= # Commons DBCP2 specific settingsspring.datasource.driver-class-name= # Fully qualified name of the JDBC driver. Auto-detected based on the URL by default.spring.datasource.generate-unique-name=false # Generate a random datasource name.spring.datasource.hikari.*= # Hikari specific settingsspring.datasource.initialize=true # Populate the database using 'data.sql'.spring.datasource.jmx-enabled=false # Enable JMX support (if provided by the underlying pool).spring.datasource.jndi-name= # JNDI location of the datasource. Class, url, username & password are ignored when set.spring.datasource.name=testdb # Name of the datasource.spring.datasource.password= # Login password of the database.spring.datasource.platform=all # Platform to use in the schema resource (schema-${platform}.sql).spring.datasource.schema= # Schema (DDL) script resource references.spring.datasource.schema-username= # User of the database to execute DDL scripts (if different).spring.datasource.schema-password= # Password of the database to execute DDL scripts (if different).spring.datasource.separator=; # Statement separator in SQL initialization scripts.spring.datasource.sql-script-encoding= # SQL scripts encoding.spring.datasource.tomcat.*= # Tomcat datasource specific settingsspring.datasource.type= # Fully qualified name of the connection pool implementation to use. By default, it is auto-detected from the classpath.spring.datasource.url= # JDBC url of the database.spring.datasource.username= # Login user of the database.spring.datasource.xa.data-source-class-name= # XA datasource fully qualified name.spring.datasource.xa.properties= # Properties to pass to the XA data source.
第一行列出了两个类名:DatasourceAutoConfiguration和DataSourceProperties。让我们来看下DatasourceProperties的源码:
@ConfigurationProperties(prefix = "spring.datasource")public class DataSourceProperties implements BeanClassLoaderAware, EnvironmentAware, InitializingBean {private ClassLoader classLoader;private Environment environment;/** * Name of the datasource. */private String name = "testdb";/** * Generate a random datasource name. */private boolean generateUniqueName;/** * Fully qualified name of the connection pool implementation to use. By default, it * is auto-detected from the classpath. */private Class<? extends DataSource> type;/** * Fully qualified name of the JDBC driver. Auto-detected based on the URL by default. */private String driverClassName;/** * JDBC url of the database. */private String url;/** * Login user of the database. */private String username;/** * Login password of the database. */private String password;/** * JNDI location of the datasource. Class, url, username & password are ignored when * set. */private String jndiName;/** * Populate the database using 'data.sql'. */private boolean initialize = true;/** * Platform to use in the schema resource (schema-${platform}.sql). */private String platform = "all";/** * Schema (DDL) script resource references. */private List<String> schema;/** * User of the database to execute DDL scripts (if different). */private String schemaUsername;/** * Password of the database to execute DDL scripts (if different). */private String schemaPassword;/** * Data (DML) script resource references. */private List<String> data;/** * User of the database to execute DML scripts. */private String dataUsername;/** * Password of the database to execute DML scripts. */private String dataPassword;
相信看到这个文件的小伙伴立马懂了。第一行定义了datasource配置的前缀spring.datasource,url, username, password, driverClassName是属性名称,在properties文件中用 - 作为单词的分隔符。
2. spring.jpa参考配置:
# JPA (JpaBaseConfiguration, HibernateJpaAutoConfiguration)spring.data.jpa.repositories.enabled=true # Enable JPA repositories.spring.jpa.database= # Target database to operate on, auto-detected by default. Can be alternatively set using the "databasePlatform" property.spring.jpa.database-platform= # Name of the target database to operate on, auto-detected by default. Can be alternatively set using the "Database" enum.spring.jpa.generate-ddl=false # Initialize the schema on startup.spring.jpa.hibernate.ddl-auto= # DDL mode. This is actually a shortcut for the "hibernate.hbm2ddl.auto" property. Default to "create-drop" when using an embedded database, "none" otherwise.spring.jpa.hibernate.naming.implicit-strategy= # Hibernate 5 implicit naming strategy fully qualified name.spring.jpa.hibernate.naming.physical-strategy= # Hibernate 5 physical naming strategy fully qualified name.spring.jpa.hibernate.naming.strategy= # Hibernate 4 naming strategy fully qualified name. Not supported with Hibernate 5.spring.jpa.hibernate.use-new-id-generator-mappings= # Use Hibernate's newer IdentifierGenerator for AUTO, TABLE and SEQUENCE.spring.jpa.open-in-view=true # Register OpenEntityManagerInViewInterceptor. Binds a JPA EntityManager to the thread for the entire processing of the request.spring.jpa.properties.*= # Additional native properties to set on the JPA provider.spring.jpa.show-sql=false # Enable logging of SQL statements.
打开JpaBaseConfiguration.java:
@EnableConfigurationProperties(JpaProperties.class)@Import(DataSourceInitializedPublisher.Registrar.class)public abstract class JpaBaseConfiguration implements BeanFactoryAware {private final DataSource dataSource;private final JpaProperties properties;private final JtaTransactionManager jtaTransactionManager;

第一行开启了JpaProperties的配置,找到JpaProperties.java:

@ConfigurationProperties(prefix = "spring.jpa")public class JpaProperties {/** * Additional native properties to set on the JPA provider. */private Map<String, String> properties = new HashMap<>();/** * Name of the target database to operate on, auto-detected by default. Can be * alternatively set using the "Database" enum. */private String databasePlatform;/** * Target database to operate on, auto-detected by default. Can be alternatively set * using the "databasePlatform" property. */private Database database;/** * Initialize the schema on startup. */private boolean generateDdl = false;/** * Enable logging of SQL statements. */private boolean showSql = false;private Hibernate hibernate = new Hibernate();
以及JpaProperties的内部类Hibernate:

public static class Hibernate {private static final String USE_NEW_ID_GENERATOR_MAPPINGS = "hibernate.id."+ "new_generator_mappings";/** * DDL mode. This is actually a shortcut for the "hibernate.hbm2ddl.auto" * property. Default to "create-drop" when using an embedded database, "none" * otherwise. */private String ddlAuto;/** * Use Hibernate's newer IdentifierGenerator for AUTO, TABLE and SEQUENCE. This is * actually a shortcut for the "hibernate.id.new_generator_mappings" property. * When not specified will default to "false" for backwards compatibility. */private Boolean useNewIdGeneratorMappings;private final Naming naming = new Naming();
所以才有spring.jpa.show-sql和spring.jpa.hibernate.ddl-auto的配置项。还有你熟悉的配置:
# PROFILESspring.profiles.active= # Comma-separated list (or list if using YAML) of active profiles.spring.profiles.include= # Unconditionally activate the specified comma separated profiles (or list of profiles if using YAML).
# EMBEDDED SERVER CONFIGURATION (ServerProperties)server.address= # Network address to which the server should bind to.server.compression.enabled=false # If response compression is enabled.server.compression.excluded-user-agents= # List of user-agents to exclude from compression.server.compression.mime-types= # Comma-separated list of MIME types that should be compressed. For instance `text/html,text/css,application/json`server.compression.min-response-size= # Minimum response size that is required for compression to be performed. For instance 2048server.connection-timeout= # Time in milliseconds that connectors will wait for another HTTP request before closing the connection. When not set, the connector's container-specific default will be used. Use a value of -1 to indicate no (i.e. infinite) timeout.server.context-parameters.*= # Servlet context init parameters. For instance `server.context-parameters.a=alpha`server.context-path= # Context path of the application.server.display-name=application # Display name of the application.server.max-http-header-size=0 # Maximum size in bytes of the HTTP message header.server.error.include-stacktrace=never # When to include a "stacktrace" attribute.server.error.path=/error # Path of the error controller.server.error.whitelabel.enabled=true # Enable the default error page displayed in browsers in case of a server error.server.jetty.acceptors= # Number of acceptor threads to use.server.jetty.max-http-post-size=0 # Maximum size in bytes of the HTTP post or put content.server.jetty.selectors= # Number of selector threads to use.server.jsp-servlet.class-name=org.apache.jasper.servlet.JspServlet # The class name of the JSP servlet.server.jsp-servlet.init-parameters.*= # Init parameters used to configure the JSP servletserver.jsp-servlet.registered=true # Whether or not the JSP servlet is registeredserver.port=8080 # Server HTTP port.
更多的Spring Boot配置请参考spring boot properties配置。






原创粉丝点击