时间:2021-05-20
这篇文章主要介绍了SpringBoot注入配置文件的3种方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
方案1:@ConfigurationProperties+@Component
方案2:@Bean+@ConfigurationProperties
我们还可以把@ConfigurationProperties还可以直接定义在@bean的注解上,这是bean实体类就不用@Component和@ConfigurationProperties了,这边是Boot的动态数据源切换的类。
package com.topcheer.oss.base.datasource;import com.alibaba.druid.pool.DruidDataSource;import com.xiaoleilu.hutool.crypto.symmetric.SymmetricAlgorithm;import com.xiaoleilu.hutool.crypto.symmetric.SymmetricCrypto;import com.xiaoleilu.hutool.util.CharsetUtil;import com.xiaoleilu.hutool.util.HexUtil;import lombok.extern.slf4j.Slf4j;@Slf4jpublic class UmspscDataSource extends DruidDataSource { private static final long serialVersionUID = 4766401181052251539L; private String passwordDis; /** * 密匙 */ private final static String Pkey ="1234565437892132"; @Override public String getPassword() { if(passwordDis != null && passwordDis.length() > 0) { return passwordDis; } String encPassword = super.getPassword(); if(null == encPassword) { return null; } log.info("数据库密码加解密,{" + encPassword + "}"); try { // 密文解密,解密方法可以修改 String key = HexUtil.encodeHexStr(Pkey); SymmetricCrypto aes = new SymmetricCrypto(SymmetricAlgorithm.AES, key.getBytes()); passwordDis = aes.decryptStr(encPassword, CharsetUtil.CHARSET_UTF_8); return passwordDis; } catch (Exception e) { log.error("数据库密码解密出错,{"+encPassword + "}"); //log.error(LogUtil.e(e)); //throw new Exception("数据库密码解密失败!", e); return null; } }}@Bean(name = "systemDataSource") @ConfigurationProperties(ignoreUnknownFields = false, prefix = "spring.datasource.system") public DataSource systemDataSource() { return new UmspscDataSource(); } @Bean(name = "secondDataSource") @ConfigurationProperties(ignoreUnknownFields = false, prefix = "spring.datasource.second") public DataSource secondDataSource() { return new UmspscDataSource(); } @Bean(name="systemJdbcTemplate") public JdbcTemplate systemJdbcTemplate( @Qualifier("systemDataSource") DataSource dataSource) { return new JdbcTemplate(dataSource); } @Bean(name="secondJdbcTemplate") public JdbcTemplate secondJdbcTemplate( @Qualifier("secondDataSource") DataSource dataSource) { return new JdbcTemplate(dataSource); }方案3:@ConfigurationProperties + @EnableConfigurationProperties
我们和上面例子一样注解属性,然后用 Spring的@Autowire来注入 mail configuration bean:
package com.dxz.property;import org.springframework.boot.context.properties.ConfigurationProperties;@ConfigurationProperties(locations = "classpath:mail.properties", ignoreUnknownFields = false, prefix = "mail")public class MailProperties { private String host; private int port; private String from; private String username; private String password; private Smtp smtp; // ... getters and setters public String getHost() { return host; } public void setHost(String host) { this.host = host; } public int getPort() { return port; } public void setPort(int port) { this.port = port; } public String getFrom() { return from; } public void setFrom(String from) { this.from = from; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Smtp getSmtp() { return smtp; } public void setSmtp(Smtp smtp) { this.smtp = smtp; } @Override public String toString() { return "MailProperties [host=" + host + ", port=" + port + ", from=" + from + ", username=" + username + ", password=" + password + ", smtp=" + smtp + "]"; } public static class Smtp { private boolean auth; private boolean starttlsEnable; public boolean isAuth() { return auth; } public void setAuth(boolean auth) { this.auth = auth; } public boolean isStarttlsEnable() { return starttlsEnable; } public void setStarttlsEnable(boolean starttlsEnable) { this.starttlsEnable = starttlsEnable; } }}启动类及测试类:
package com.dxz.property;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.builder.SpringApplicationBuilder;import org.springframework.boot.context.properties.EnableConfigurationProperties;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.bind.annotation.RestController;@RestController@SpringBootApplication@EnableConfigurationProperties(MailProperties.class)public class TestProperty1 { @Autowired private MailProperties mailProperties; @RequestMapping(value = "/hello", method = RequestMethod.GET) @ResponseBody public String hello() { System.out.println("mailProperties" + mailProperties); return "hello world"; } public static void main(String[] args) { //SpringApplication.run(TestProperty1.class, args); new SpringApplicationBuilder(TestProperty1.class).web(true).run(args); }}结果:
请注意@EnableConfigurationProperties注解。该注解是用来开启对@ConfigurationProperties注解配置Bean的支持。也就是@EnableConfigurationProperties注解告诉Spring Boot 能支持@ConfigurationProperties。如果不指定会看到如下异常:
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.dxz.property.MailProperties] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
注意: 还有其他办法 (Spring Boot 总是有其他办法!) 让@ConfigurationProperties beans 被添加 – 用@Configuration或者 @Component注解, 这样就可以在 component scan时候被发现了。
@ConfigurationProperties @Value 功能 批量注入配置文件中的属性 一个个指定 松散绑定(松散语法) 支持 不支持 SpEL 不支持 支持 JSR303数据校验 支持 不支持 复杂类型封装 支持 不支持
配置文件yml还是properties他们都能获取到值;
如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value;
如果说,我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties;
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
SpringBoot读取配置文件1)通过注入ApplicationContext或者Environment对象来读取配置文件里的配置信息。packagecom.
Springboot通过@Value注解将配置文件中的属性注入到容器内组件中(可用在@Controller、@Service、@Configuration、@C
今天给大家介绍一下SpringBoot中是如何实现依赖注入的功能。在以往spring使用中,依赖注入一般都是通过在Spring的配置文件中添加bean方法实现的
前言在项目开发中经常会用到配置文件,配置文件的存在解决了很大一份重复的工作。今天就分享四种在Springboot中获取配置文件的方式。注:前三种测试配置文件为s
python操作配置文件ini的三种方法方法一:crudini命令说明crudini命令是Linux下的一个操作配置文件的命令工具用法crudini--set[