| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- package com.kxs.common.datasource;
- import com.baomidou.dynamic.datasource.creator.DataSourceCreator;
- import com.baomidou.dynamic.datasource.creator.DefaultDataSourceCreator;
- import com.baomidou.dynamic.datasource.creator.hikaricp.HikariDataSourceCreator;
- import com.baomidou.dynamic.datasource.processor.DsJakartaHeaderProcessor;
- import com.baomidou.dynamic.datasource.processor.DsJakartaSessionProcessor;
- import com.baomidou.dynamic.datasource.processor.DsProcessor;
- import com.baomidou.dynamic.datasource.processor.DsSpelExpressionProcessor;
- import com.baomidou.dynamic.datasource.provider.DynamicDataSourceProvider;
- import com.kxs.common.datasource.config.ClearTtlDataSourceFilter;
- import com.kxs.common.datasource.config.DataSourceProperties;
- import com.kxs.common.datasource.config.JdbcDynamicDataSourceProvider;
- import com.kxs.common.datasource.config.LastParamDsProcessor;
- import org.jasypt.encryption.StringEncryptor;
- import org.springframework.beans.factory.BeanFactory;
- import org.springframework.boot.autoconfigure.AutoConfigureAfter;
- import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
- import org.springframework.boot.context.properties.EnableConfigurationProperties;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.context.expression.BeanFactoryResolver;
- import java.util.ArrayList;
- import java.util.List;
- /**
- * @author LXQ
- * @date 2021-02-06
- * <p>
- * 动态数据源切换配置
- */
- @Configuration(proxyBeanMethods = false)
- @AutoConfigureAfter(DataSourceAutoConfiguration.class)
- @EnableConfigurationProperties(DataSourceProperties.class)
- public class DynamicDataSourceAutoConfiguration {
- /**
- * 动态数据源提供者
- * @param defaultDataSourceCreator 默认数据源创建器
- * @param stringEncryptor 字符串加密器
- * @param properties 数据源配置属性
- * @return 动态数据源提供者
- */
- @Bean
- public DynamicDataSourceProvider dynamicDataSourceProvider(DefaultDataSourceCreator defaultDataSourceCreator,
- StringEncryptor stringEncryptor, DataSourceProperties properties) {
- return new JdbcDynamicDataSourceProvider(defaultDataSourceCreator, stringEncryptor, properties);
- }
- /**
- * 获取数据源处理器
- * @return 数据源处理器
- */
- @Bean
- public DsProcessor dsProcessor(BeanFactory beanFactory) {
- DsProcessor lastParamDsProcessor = new LastParamDsProcessor();
- DsProcessor headerProcessor = new DsJakartaHeaderProcessor();
- DsProcessor sessionProcessor = new DsJakartaSessionProcessor();
- DsSpelExpressionProcessor spelExpressionProcessor = new DsSpelExpressionProcessor();
- spelExpressionProcessor.setBeanResolver(new BeanFactoryResolver(beanFactory));
- lastParamDsProcessor.setNextProcessor(headerProcessor);
- headerProcessor.setNextProcessor(sessionProcessor);
- sessionProcessor.setNextProcessor(spelExpressionProcessor);
- return lastParamDsProcessor;
- }
- /**
- * 默认数据源创建器
- * @param hikariDataSourceCreator Hikari数据源创建器
- * @return 默认数据源创建器
- */
- @Bean
- public DefaultDataSourceCreator defaultDataSourceCreator(HikariDataSourceCreator hikariDataSourceCreator) {
- DefaultDataSourceCreator defaultDataSourceCreator = new DefaultDataSourceCreator();
- List<DataSourceCreator> creators = new ArrayList<>();
- creators.add(hikariDataSourceCreator);
- defaultDataSourceCreator.setCreators(creators);
- return defaultDataSourceCreator;
- }
- /**
- * 清除Ttl数据源过滤器
- * @return 清除Ttl数据源过滤器
- */
- @Bean
- public ClearTtlDataSourceFilter clearTtlDsFilter() {
- return new ClearTtlDataSourceFilter();
- }
- }
|