您的位置:首页 > 编程语言 > Java开发

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

2017-06-23 21:38 639 查看

引言

最近在构建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 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配置。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息