SpringBoot 配置文件详解(告别XML)

SpringBoot 配置文件详解(告别XML),第1张

快速学会和掌握 SpringBoot 的 核心配置文件的使用。

SpringBoot 提供了丰富的 外部配置 ,常见的有:

其中核心配置文件我们并不陌生,主要以Key-Value的形式进行配置,其中属性Key主要分为两种:

在 application.properties 添加配置如下:

① 添加数据源信息

在 application.propertis 添加配置如下:

① 添加认证信息,其中 socks.indentity.* 是自定义的属性前缀。

② 添加随机值,其中spring.test.* 是自定义的属性前缀。

使用方法: @ConfigurationProperties(prefix = "spring.datasource")

使用说明:提供 Setter方法 和 标记组件 Component

如何验证是否成功读取配置?答:这里可以简单做个验证,注入 MyDataSource ,使用 Debug 模式可以看到如下信息:

使用方法: @Value("spring.datasource.*")

使用说明:提供 Setter方法 和 标记组件 Component

注意事项:@Value不支持注入静态变量,可间接通过Setter注入来实现。

关于两者的简单功能对比:

显然,前者支持松绑定的特性更强大,所以在实际开发中建议使用@ConfigurationProperties来读取自定义属性。

SpringBoot 默认会加载这些路径加载核心配置文件,按优先级从高到低进行排列:具体规则详见 ConfigFileApplicationListener

如果存在多个配置文件,则严格按照优先级进行覆盖,最高者胜出:

举个简单的例子,例如再上述位置都有一个application.properties ,并且每个文件都写入了server.port=xx (xx分别是9001,9002,9003,9004),在启动成功之后,最终应用的端口为:9004。图例:

如果想修改默认的加载路径 或者 调改默认的配置文件名,我们可以借助命令行参数进行指定,例如:

YAML是JSON的一个超集,是一种可轻松定义层次结构的数据格式。

答: 因为配置文件这东西,结构化越早接触越规范越好。这里推荐阅读阮一峰老师写的 YAML语言教程 ,写的很简单明了。

引入依赖: 在POM文件引入 snakeyaml 的依赖。

使用说明: 直接在类路径添加 application.yml 即可。

例如下面这两段配置是完全等价的:

① 在 application.yml 配置数据源:

② 在 application.properties 配置数据源:

在项目的实际开发中,我们往往需要根据不同的环境来加载不同的配置文件。例如生产环境,测试环境和开发环境等。此时,我们可以借助 Profiles 来指定加载哪些配置文件。例如:

温馨提示:如果spring.profiles.active指定了多个配置文件,则按顺序加载,其中最后的优先级最高,也就是最后的会覆盖前者。

使用方法:

使用Maven插件打包好项目,然后在当前路径,执行DOS命令: java -jar demo.jar --server.port=8081 ,在控制台可看到应用端口变成了8081。

实现原理:

默认情况下,SpringBoot会将这些命令行参数转化成一个 Property ,并将其添加到 Environment 上下文。

温馨提示:

由于命令行参数优先级非常之高,基本高于所有常见的外部配置,所以使用的时候要谨慎。详见 PropertySource 执行顺序 。

关闭方法:

如果想禁用命令行属性,可以设置如下 *** 作:springApplication.setAddCommandLineProperties(false)

1、首先配置多个datasource

<!-- 主数据库的数据据源 -->

<bean id="masterDataSource" class="org.apache.commons.dbcp.BasicDataSource"

destroy-method="close">

<property name="driverClassName" value="oracle.jdbc.OracleDriver" />

<property name="url" value="jdbc:oracle:thin:@192.168.10.11:1521:trew" />

<property name="username" value="poi" />

<property name="password" value="poi" />

</bean>

<!-- 备份库的数据据源 -->

<bean id="slaveDataSource" class="org.apache.commons.dbcp.BasicDataSource"

destroy-method="close">

<property name="driverClassName" value="oracle.jdbc.OracleDriver" />

<property name="url" value="jdbc:oracle:thin:@192.168.10.12:1521:trew" />

<property name="username" value="poi2" />

<property name="password" value="poi2" />

</bean>

2、写一个DynamicDataSource类继承AbstractRoutingDataSource,并实现determineCurrentLookupKey方法

?

public class DynamicDataSource extends AbstractRoutingDataSource {

@SuppressWarnings("unused")

private Log logger = LogFactory.getLog(getClass())

@Override

protected Object determineCurrentLookupKey() {

return DbContextHolder.getDbType()

}

}

public class DbContextHolder {

@SuppressWarnings("rawtypes")

private static final ThreadLocal contextHolder = new ThreadLocal()

@SuppressWarnings("unchecked")

public static void setDbType(String dbType) {

contextHolder.set(dbType)

}

public static String getDbType() {

return (String) contextHolder.get()

}

public static void clearDbType() {

contextHolder.remove()

}

}

3. 配置动态数据源

<!--将DynamicDataSource Bean加入到Spring的上下文xml配置文件中去,同时配置DynamicDataSource的targetDataSources(多数据源目标)属性的Map映射。-->

<bean id="dataSource" class="cn.com.core.datasource.DynamicDataSource">

<property name="targetDataSources">

<map key-type="java.lang.String">

<entry key="masterDataSource" value-ref="masterDataSource" />

<entry key="slaveDataSource" value-ref="slaveDataSource" />

</map>

</property>

<property name="defaultTargetDataSource" ref="masterDataSource"/>

</bean>

4.使用动态数据源(hibernate)

<bean id="sessionFactory"

class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

<property name="dataSource" ref="dataSource" />

<property name="lobHandler" ref="lobHandler"/>

<property name="eventListeners">

<map>

<entry key="post-insert">

<ref bean="logListener"/>

</entry>

<entry key="post-update">

<ref bean="logListener"/>

</entry>

<entry key="post-delete">

<ref bean="logListener"/>

</entry>

</map>

</property>

<property name="hibernateProperties">

<props>

<prop key="hibernate.dialect">

org.hibernate.dialect.Oracle10gDialect

<!-- org.hibernate.dialect.OracleDerbyDialect -->

</prop>

<prop key="hibernate.show_sql">true</prop>

<!-- <prop key="hibernate.generate_statistics">true</prop>-->

<prop key="hibernate.connection.release_mode">

auto

</prop>

<prop key="hibernate.autoReconnect">true</prop>

<!--

<prop key="hibernate.hbm2ddl.auto">update</prop>

-->

<prop key="hibernate.cache.use_second_level_cache">false</prop>

<prop key="hibernate.cache.provider_class">

org.hibernate.cache.EhCacheProvider

</prop>

<prop key="hibernate.cache.use_query_cache">false</prop>

</props>

</property>

</bean>

使用Hibernate时的事务管理配置示例:

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">

<property name="sessionFactory" ref="sessionFactory" />

bean>

springboot application.properties 写多个配置文件的方法:

# 文件编码

banner.charset= UTF-8

# 文件位置

banner.location= classpath:banner.txt

# 日志配置

# 日志配置文件的位置。 例如对于Logback的`classpath:logback.xml`

logging.config=

# %wEx#记录异常时使用的转换字。

logging.exception-conversion-word=

# 日志文件名。 例如`myapp.log`

logging.file=

# 日志级别严重性映射。 例如`logging.level.org.springframework =  DEBUG`

logging.level.*=

# 日志文件的位置。 例如`/ var / log

logging.path=

# 用于输出到控制台的Appender模式。 只支持默认的logback设置。

logging.pattern.console=

# 用于输出到文件的Appender模式。 只支持默认的logback设置。

logging.pattern.file=

# 日志级别的Appender模式(默认%5p)。 只支持默认的logback设置。

logging.pattern.level=

#注册日志记录系统的初始化挂钩。

logging.register-shutdown-hook= false

# AOP 切面

# 添加@EnableAspectJAutoProxy。

spring.aop.auto= true

# 是否要创建基于子类(CGLIB)的代理(true),而不是基于标准的基于Java接口的代理(false)。

spring.aop.proxy-target-class= false

# 应用程序上下文初始化器

# 应用指标。

spring.application.index=

# 应用程序名称。

spring.application.name= 

# 国际化(消息源自动配置)

#

spring.messages.basename= messages

# 以逗号分隔的基础名称列表,每个都在ResourceBundle约定之后。

# 加载的资源束文件缓存到期,以秒为单位。 设置为-1时,软件包将永久缓存。

spring.messages.cache-seconds= -1

# 消息编码。

spring.messages.encoding= UTF-8

# 设置是否返回到系统区域设置,如果没有找到特定语言环境的文件。

spring.messages.fallback-to-system-locale= true

# REDIS (Redis 配置)

# 连接工厂使用的数据库索引。

spring.redis.database= 0

# Redis服务器主机。

spring.redis.host= localhost

# 登录redis服务器的密码。

spring.redis.password=

# 给定时间池可以分配的最大连接数。 使用负值为无限制。

spring.redis.pool.max-active= 8

# 池中“空闲”连接的最大数量。 使用负值来表示无限数量的空闲连接。

spring.redis.pool.max-idle= 8

# 连接分配在池耗尽之前在抛出异常之前应阻止的最大时间量(以毫秒为单位)。 使用负值无限期地阻止。

spring.redis.pool.max-wait= -1

# 定义池中维护的最小空闲连接数。 此设置只有在正值时才有效果。

spring.redis.pool.min-idle= 0

# redis服务器端口

spring.redis.port= 6379

# redis服务器名称

spring.redis.sentinel.master=

# spring.redis.sentinel.nodes=

# 连接超时(毫秒)。

spring.redis.timeout= 0

# 管理员 (Spring应用程序管理员JMX自动配置)

# 开启应用管理功能。

spring.application.admin.enabled= false

# JMX应用程序名称MBean。

spring.application.admin.jmx-name= org.springframework.boot:type= Admin,name= SpringApplication

# 自动配置

# 自动配置类排除。

spring.autoconfigure.exclude=

# spring 核心配置

# 跳过搜索BeanInfo类。

spring.beaninfo.ignore= true

# spring 缓存配置

# 由底层缓存管理器支持的要创建的缓存名称的逗号分隔列表。

spring.cache.cache-names=

# 用于初始化EhCache的配置文件的位置。

spring.cache.ehcache.config=

# 用于创建缓存的规范。 检查CacheBuilderSpec有关规格格式的更多细节。

spring.cache.guava.spec=

# 用于初始化Hazelcast的配置文件的位置。

spring.cache.hazelcast.config=

# 用于初始化Infinispan的配置文件的位置。

spring.cache.infinispan.config=

# 用于初始化缓存管理器的配置文件的位置。

spring.cache.jcache.config=

# 用于检索符合JSR-107的缓存管理器的CachingProvider实现的完全限定名称。 只有在类路径上有多个JSR-107实现可用时才需要。

spring.cache.jcache.provider=

# 缓存类型,默认情况下根据环境自动检测。

spring.cache.type=

# spring配置 (配置文件应用侦听器)

# 配置文件位置。

spring.config.location=

# 配置文件名。

spring.config.name= application

Springboot的多配置文件是指:系统中存在多个配置文件,在不同的运行环境使用不同的配置文件即可。

启动项目的方法一般有两种 :

1、 运行RootApplication中的main方法。

2、 使用命令:mvn spring-boot:run

这两方法默认都是使用application.properties中的配置信息,如果有指spring.profiles.active则使用指定的配置信息,这种方式一般用在产品运行时,在开发和测试的时候则需要指定配置文件。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11809422.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存