环境和依赖
由于 nacos-config-spring-boot-starter 缺失对 Bean Auto-Reresh的支持,下文将通过spring-cloud-context的引入提供对bean自动刷新能力的支持
<spring-boot.version>2.6.5</spring-boot.version>
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-config-spring-boot-starter</artifactId>
<version>0.2.11</version>
</dependency>
<!--引入SpringCloud中的@RefreshScope来实现bean的自动刷新-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-context</artifactId>
<version>3.0.3</version>
</dependency>
NacosConfig 监听器
@Autowired
private ContextRefresher contextRefresher;
@NacosConfigListener(dataId = "${nacos.config.data-id}")
public void aaaa(String msg){
System.out.println("refresh"+msg);
new Thread( () -> contextRefresher.refresh() ).start();
}
Mysql配置类和JdbcTemlate Bean 自动刷新
@Configuration
@Data
@RefreshScope
@ConfigurationProperties(prefix = "mysql")
public class MysqlBean {
private String url;
private String name;
private String password;
}
@Configuration
public class DbConf {
@Bean
@RefreshScope
public DataSource dataSource(MysqlBean mysqlBean){
HikariConfig config = new HikariConfig();
config.setJdbcUrl(mysqlBean.getUrl());
config.setUsername(mysqlBean.getName());
config.setPassword(mysqlBean.getPassword());
config.setMaximumPoolSize(20);
config.setMaxLifetime(TimeUnit.SECONDS.toMillis(60));
config.setDriverClassName("com.mysql.cj.jdbc.Driver");
return new HikariDataSource(config);
}
@Bean
@DependsOn("dataSource")
@RefreshScope
public JdbcTemplate jdbcTemplate(DataSource dataSource){
return new JdbcTemplate(dataSource);
}
}