spring boot多数据源
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
@Retention(RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface ChangeDS {
String value() default "";
}
package com.bonc.ygjq.bd.platform.config;
import com.bonc.ygjq.bd.platform.utils.DateUtils;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import javax.sql.DataSource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ConfigurationProperties(prefix = "ygjq")
public class YgjqConfigProperties {
private static int defaultPageSize;
private static int defaultDays;
private static String casUrl;
public static final String format = "%.2f";
private Map<String, List<Hikvision>> SSJK;
private Map<String, HikariDataSource> dataSources;
public Map<String, HikariDataSource> getDataSources() {
return dataSources;
}
public void setDataSources(Map<String, HikariConfig> dataSources) {
Map<String, HikariDataSource> map = new HashMap<>();
dataSources.entrySet().stream().forEach(x -> {
map.put(x.getKey(), new HikariDataSource(x.getValue()));
});
this.dataSources = map;
}
public int getDefaultDays() {
return defaultDays;
}
public int getDefaultDays(Integer day) {
return day == null ? defaultDays : day;
}
public void setDefaultDays(int defaultDays) {
this.defaultDays = defaultDays;
DateUtils.defaultDays = defaultDays;
}
public int getDefaultPageSize() {
return defaultPageSize;
}
public static int getDefaultPageSize(Integer size) {
return size == null ? defaultPageSize : size;
}
public void setDefaultPageSize(int defaultPageSize) {
this.defaultPageSize = defaultPageSize;
}
public Map<String, List<Hikvision>> getSSJK() {
return SSJK;
}
public void setSSJK(Map<String, List<Hikvision>> SSJK) {
this.SSJK = SSJK;
}
public static String getCasUrl() {
return casUrl;
}
public void setCasUrl(String casUrl) {
YgjqConfigProperties.casUrl = casUrl;
}
}
package com.bonc.ygjq.bd.platform.config;
import cn.hutool.cache.CacheUtil;
import cn.hutool.cache.impl.TimedCache;
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.annotation.Order;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
import org.springframework.transaction.TransactionManager;
import javax.sql.DataSource;
import java.util.Map;
@Configuration
@EnableConfigurationProperties(YgjqConfigProperties.class)
public class YgjqConfiuration {
@Autowired
YgjqConfigProperties ygjqConfigProperties;
@Bean
public TimedCache<String,Object> timedCache(){
return CacheUtil.newTimedCache(1000 * 60 * 60 * 12);
}
@Bean
@Primary
public DataSource dataSource() throws Exception {
return new AbstractRoutingDataSource() {
{
Map dataSources = ygjqConfigProperties.getDataSources();
setTargetDataSources(dataSources);
setDefaultTargetDataSource(dataSources.get("xingyun"));
}
@Override
protected Object determineCurrentLookupKey() {
return RoutingDataSourceContext.threadLocal.get();
}
};
}
@Order(2)
@Bean
public DataSourceTransactionManager transactionManager(DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
@Service
@ChangeDS("mysql")
public class SpClickSaveService {
@Resource
SpClickSaveDao spClickSaveDao;
public void Save(String name) {
spClickSaveDao.Save(name);
}
public SpClickSave fetch() {
return spClickSaveDao.fetch();
}
}
yggl:
dataSources:
xingyun:
driver-class-name: com.bonc.ygjq.bd.platform.config.XCloudDriverNewDefine
jdbcUrl: jdbc:xcloud:@131.107.26.235:1803/yggl_cirrodata@131.107.26.238:1803/yggl_cirrodata@131.107.26.241:1803/yggl_cirrodata?connectRetry=3&socketTimeOut=3600000&connectDirect=false
username: PUBLISH
password: Yg#Gx202001
max-lifetime: 600000
mysql:
jdbcUrl: jdbc:mysql://appsmysql.ygjt.net:3306/web_crawler?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&useSSL=false&allowMultiQueries=true
username: crawler
password: Yg_GxWCrawler202001
driver-class-name: com.mysql.cj.jdbc.Driver
cas:
jdbcUrl: jdbc:mysql://appsmysql.ygjt.net:3306/bonc_decisionplf?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&useSSL=false
username: decisionplf
password: Yg+GxDp202001
driver-class-name: com.mysql.cj.jdbc.Driver