教你如何配置Spring Boot的properties文件
2017-06-23 21:38
639 查看
引言
最近在构建Spring Boot的应用时很困惑,不知道该如何配置application.properties或application.yml文件。于是在网上搜别人做的demo,结果peoperties文件配置不尽相同,不知道哪个是对的,为什么要这样配置。今天看了Spring官网文档上对Common Application Properties的说明,才对这些配置有了大概的了解。特分享出来供大家参考和学习。下面以基于Spring Boot的SpringData 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 settings spring.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 settings spring.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 settings spring.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的配置项。还有你熟悉的配置:
# PROFILES spring.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 2048 server.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 servlet server.jsp-servlet.registered=true # Whether or not the JSP servlet is registered server.port=8080 # Server HTTP port.更多的Spring Boot配置请参考spring
boot properties配置。
相关文章推荐
- 如何将spring boot application.properties修改成为spring boot配置文件
- springboot如何读取配置文件中的参数(例如:application-consts.properties) 又结合maven读取配置文件的顺序
- spring yml properties 配置文件如何生效
- springboot中配置文件application.properties的理解
- Spring如何引用properties文件里的配置
- Spring Boot属性文件application.properties配置文档(全部)
- [Spring boot]配置文件properties加载
- Spring Boot系列教程四:配置文件详解properties
- SpringBoot 配置文件 application.properties
- SpringBoot如何导入自定义配置的yml文件
- SpringBoot如何导入自定义配置的yml文件
- Java中如何获取spring中配置的properties属性文件内容
- Java中如何获取spring中配置的properties属性文件内容
- 如何在spring中读取properties配置文件里面的信息
- SpringBoot配置文件application.yml (application.properties)
- SpringBoot学习:获取yml和properties配置文件的内容
- spring如何引用properties文件里的配置
- SpringBoot获取yml和properties配置文件的内容
- 第三节:SpringBoot使用properties配置文件实现多环境配置
- SpringBoot如何导入自定义配置的yml文件