Compare commits
	
		
			2 Commits
		
	
	
		
			8f3da0bf2e
			...
			91c9602fb7
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					91c9602fb7 | ||
| 971b91329f | 
							
								
								
									
										3
									
								
								pom.xml
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								pom.xml
									
									
									
									
									
								
							@@ -18,6 +18,7 @@
 | 
			
		||||
        <module>ym-websocket</module>
 | 
			
		||||
        <module>ym-packing</module>
 | 
			
		||||
        <module>ym-s7</module>
 | 
			
		||||
        <module>ym-dynamic-datasource</module>
 | 
			
		||||
    </modules>
 | 
			
		||||
    <packaging>pom</packaging>
 | 
			
		||||
 | 
			
		||||
@@ -241,4 +242,4 @@
 | 
			
		||||
        </pluginRepository>
 | 
			
		||||
    </pluginRepositories>
 | 
			
		||||
 | 
			
		||||
</project>
 | 
			
		||||
</project>
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										26
									
								
								ym-dynamic-datasource/pom.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								ym-dynamic-datasource/pom.xml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
 | 
			
		||||
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 | 
			
		||||
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 | 
			
		||||
    <parent>
 | 
			
		||||
        <artifactId>ym-pass</artifactId>
 | 
			
		||||
        <groupId>com.cnbm</groupId>
 | 
			
		||||
        <version>1.0-SNAPSHOT</version>
 | 
			
		||||
    </parent>
 | 
			
		||||
    <modelVersion>4.0.0</modelVersion>
 | 
			
		||||
 | 
			
		||||
    <artifactId>ym-dynamic-datasource</artifactId>
 | 
			
		||||
 | 
			
		||||
    <properties>
 | 
			
		||||
        <maven.compiler.source>8</maven.compiler.source>
 | 
			
		||||
        <maven.compiler.target>8</maven.compiler.target>
 | 
			
		||||
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 | 
			
		||||
    </properties>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    <build>
 | 
			
		||||
        <finalName>${project.artifactId}</finalName>
 | 
			
		||||
    </build>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
</project>
 | 
			
		||||
@@ -0,0 +1,11 @@
 | 
			
		||||
package com.cnbm.dynamic.datasource.annotation;
 | 
			
		||||
 | 
			
		||||
import java.lang.annotation.*;
 | 
			
		||||
 | 
			
		||||
@Target({ElementType.METHOD, ElementType.TYPE})
 | 
			
		||||
@Retention(RetentionPolicy.RUNTIME)
 | 
			
		||||
@Documented
 | 
			
		||||
@Inherited
 | 
			
		||||
public @interface DataSource {
 | 
			
		||||
    String value() default "";
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,57 @@
 | 
			
		||||
package com.cnbm.dynamic.datasource.aspect;
 | 
			
		||||
 | 
			
		||||
import com.cnbm.dynamic.datasource.annotation.DataSource;
 | 
			
		||||
import com.cnbm.dynamic.datasource.config.DynamicContextHolder;
 | 
			
		||||
import org.aspectj.lang.ProceedingJoinPoint;
 | 
			
		||||
import org.aspectj.lang.annotation.Around;
 | 
			
		||||
import org.aspectj.lang.annotation.Aspect;
 | 
			
		||||
import org.aspectj.lang.annotation.Pointcut;
 | 
			
		||||
import org.aspectj.lang.reflect.MethodSignature;
 | 
			
		||||
import org.slf4j.Logger;
 | 
			
		||||
import org.slf4j.LoggerFactory;
 | 
			
		||||
import org.springframework.core.Ordered;
 | 
			
		||||
import org.springframework.core.annotation.Order;
 | 
			
		||||
import org.springframework.stereotype.Component;
 | 
			
		||||
 | 
			
		||||
import java.lang.reflect.Method;
 | 
			
		||||
 | 
			
		||||
@Aspect
 | 
			
		||||
@Component
 | 
			
		||||
@Order(Ordered.HIGHEST_PRECEDENCE)
 | 
			
		||||
public class DataSourceAspect {
 | 
			
		||||
    protected Logger logger = LoggerFactory.getLogger(getClass());
 | 
			
		||||
 | 
			
		||||
    @Pointcut("@annotation(com.cnbm.dynamic.datasource.annotation.DataSource) " +
 | 
			
		||||
            "|| @within(com.cnbm.dynamic.datasource.annotation.DataSource)")
 | 
			
		||||
    public void dataSourcePointCut() {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Around("dataSourcePointCut()")
 | 
			
		||||
    public Object around(ProceedingJoinPoint point) throws Throwable {
 | 
			
		||||
        MethodSignature signature = (MethodSignature) point.getSignature();
 | 
			
		||||
        Class targetClass = point.getTarget().getClass();
 | 
			
		||||
        Method method = signature.getMethod();
 | 
			
		||||
 | 
			
		||||
        DataSource targetDataSource = (DataSource)targetClass.getAnnotation(DataSource.class);
 | 
			
		||||
        DataSource methodDataSource = method.getAnnotation(DataSource.class);
 | 
			
		||||
        if(targetDataSource != null || methodDataSource != null){
 | 
			
		||||
            String value;
 | 
			
		||||
            if(methodDataSource != null){
 | 
			
		||||
                value = methodDataSource.value();
 | 
			
		||||
            }else {
 | 
			
		||||
                value = targetDataSource.value();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            DynamicContextHolder.push(value);
 | 
			
		||||
            logger.debug("set datasource is {}", value);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        try {
 | 
			
		||||
            return point.proceed();
 | 
			
		||||
        } finally {
 | 
			
		||||
            DynamicContextHolder.poll();
 | 
			
		||||
            logger.debug("clean datasource");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,44 @@
 | 
			
		||||
package com.cnbm.dynamic.datasource.config;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayDeque;
 | 
			
		||||
import java.util.Deque;
 | 
			
		||||
 | 
			
		||||
public class DynamicContextHolder {
 | 
			
		||||
    @SuppressWarnings("unchecked")
 | 
			
		||||
    private static final ThreadLocal<Deque<String>> CONTEXT_HOLDER = new ThreadLocal() {
 | 
			
		||||
        @Override
 | 
			
		||||
        protected Object initialValue() {
 | 
			
		||||
            return new ArrayDeque();
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获得当前线程数据源
 | 
			
		||||
     *
 | 
			
		||||
     * @return 数据源名称
 | 
			
		||||
     */
 | 
			
		||||
    public static String peek() {
 | 
			
		||||
        return CONTEXT_HOLDER.get().peek();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 设置当前线程数据源
 | 
			
		||||
     *
 | 
			
		||||
     * @param dataSource 数据源名称
 | 
			
		||||
     */
 | 
			
		||||
    public static void push(String dataSource) {
 | 
			
		||||
        CONTEXT_HOLDER.get().push(dataSource);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 清空当前线程数据源
 | 
			
		||||
     */
 | 
			
		||||
    public static void poll() {
 | 
			
		||||
        Deque<String> deque = CONTEXT_HOLDER.get();
 | 
			
		||||
        deque.poll();
 | 
			
		||||
        if (deque.isEmpty()) {
 | 
			
		||||
            CONTEXT_HOLDER.remove();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,12 @@
 | 
			
		||||
package com.cnbm.dynamic.datasource.config;
 | 
			
		||||
 | 
			
		||||
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
 | 
			
		||||
 | 
			
		||||
public class DynamicDataSource extends AbstractRoutingDataSource {
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    protected Object determineCurrentLookupKey() {
 | 
			
		||||
        return DynamicContextHolder.peek();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,50 @@
 | 
			
		||||
package com.cnbm.dynamic.datasource.config;
 | 
			
		||||
 | 
			
		||||
import com.alibaba.druid.pool.DruidDataSource;
 | 
			
		||||
import com.cnbm.dynamic.datasource.properties.DataSourceProperties;
 | 
			
		||||
import com.cnbm.dynamic.datasource.properties.DynamicDataSourceProperties;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.boot.context.properties.ConfigurationProperties;
 | 
			
		||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
 | 
			
		||||
import org.springframework.context.annotation.Bean;
 | 
			
		||||
import org.springframework.context.annotation.Configuration;
 | 
			
		||||
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
@Configuration
 | 
			
		||||
@EnableConfigurationProperties(DynamicDataSourceProperties.class)
 | 
			
		||||
public class DynamicDataSourceConfig {
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private DynamicDataSourceProperties properties;
 | 
			
		||||
 | 
			
		||||
    @Bean
 | 
			
		||||
    @ConfigurationProperties(prefix = "spring.datasource")
 | 
			
		||||
    public DataSourceProperties dataSourceProperties() {
 | 
			
		||||
        return new DataSourceProperties();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Bean
 | 
			
		||||
    public DynamicDataSource dynamicDataSource(DataSourceProperties dataSourceProperties) {
 | 
			
		||||
        DynamicDataSource dynamicDataSource = new DynamicDataSource();
 | 
			
		||||
        dynamicDataSource.setTargetDataSources(getDynamicDataSource());
 | 
			
		||||
 | 
			
		||||
        //默认数据源
 | 
			
		||||
        DruidDataSource defaultDataSource = DynamicDataSourceFactory.buildDruidDataSource(dataSourceProperties);
 | 
			
		||||
        dynamicDataSource.setDefaultTargetDataSource(defaultDataSource);
 | 
			
		||||
 | 
			
		||||
        return dynamicDataSource;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private Map<Object, Object> getDynamicDataSource(){
 | 
			
		||||
        Map<String, DataSourceProperties> dataSourcePropertiesMap = properties.getDatasource();
 | 
			
		||||
        Map<Object, Object> targetDataSources = new HashMap<>(dataSourcePropertiesMap.size());
 | 
			
		||||
        dataSourcePropertiesMap.forEach((k, v) -> {
 | 
			
		||||
            DruidDataSource druidDataSource = DynamicDataSourceFactory.buildDruidDataSource(v);
 | 
			
		||||
            targetDataSources.put(k, druidDataSource);
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        return targetDataSources;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,40 @@
 | 
			
		||||
package com.cnbm.dynamic.datasource.config;
 | 
			
		||||
 | 
			
		||||
import com.alibaba.druid.pool.DruidDataSource;
 | 
			
		||||
import com.cnbm.dynamic.datasource.properties.DataSourceProperties;
 | 
			
		||||
 | 
			
		||||
import java.sql.SQLException;
 | 
			
		||||
 | 
			
		||||
public class DynamicDataSourceFactory {
 | 
			
		||||
 | 
			
		||||
    public static DruidDataSource buildDruidDataSource(DataSourceProperties properties) {
 | 
			
		||||
        DruidDataSource druidDataSource = new DruidDataSource();
 | 
			
		||||
        druidDataSource.setDriverClassName(properties.getDriverClassName());
 | 
			
		||||
        druidDataSource.setUrl(properties.getUrl());
 | 
			
		||||
        druidDataSource.setUsername(properties.getUsername());
 | 
			
		||||
        druidDataSource.setPassword(properties.getPassword());
 | 
			
		||||
 | 
			
		||||
        druidDataSource.setInitialSize(properties.getInitialSize());
 | 
			
		||||
        druidDataSource.setMaxActive(properties.getMaxActive());
 | 
			
		||||
        druidDataSource.setMinIdle(properties.getMinIdle());
 | 
			
		||||
        druidDataSource.setMaxWait(properties.getMaxWait());
 | 
			
		||||
        druidDataSource.setTimeBetweenEvictionRunsMillis(properties.getTimeBetweenEvictionRunsMillis());
 | 
			
		||||
        druidDataSource.setMinEvictableIdleTimeMillis(properties.getMinEvictableIdleTimeMillis());
 | 
			
		||||
        druidDataSource.setMaxEvictableIdleTimeMillis(properties.getMaxEvictableIdleTimeMillis());
 | 
			
		||||
        druidDataSource.setValidationQuery(properties.getValidationQuery());
 | 
			
		||||
        druidDataSource.setValidationQueryTimeout(properties.getValidationQueryTimeout());
 | 
			
		||||
        druidDataSource.setTestOnBorrow(properties.isTestOnBorrow());
 | 
			
		||||
        druidDataSource.setTestOnReturn(properties.isTestOnReturn());
 | 
			
		||||
        druidDataSource.setPoolPreparedStatements(properties.isPoolPreparedStatements());
 | 
			
		||||
        druidDataSource.setMaxOpenPreparedStatements(properties.getMaxOpenPreparedStatements());
 | 
			
		||||
        druidDataSource.setSharePreparedStatements(properties.isSharePreparedStatements());
 | 
			
		||||
 | 
			
		||||
        try {
 | 
			
		||||
            druidDataSource.setFilters(properties.getFilters());
 | 
			
		||||
            druidDataSource.init();
 | 
			
		||||
        } catch (SQLException e) {
 | 
			
		||||
            e.printStackTrace();
 | 
			
		||||
        }
 | 
			
		||||
        return druidDataSource;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,188 @@
 | 
			
		||||
package com.cnbm.dynamic.datasource.properties;
 | 
			
		||||
 | 
			
		||||
public class DataSourceProperties {
 | 
			
		||||
    private String driverClassName;
 | 
			
		||||
    private String url;
 | 
			
		||||
    private String username;
 | 
			
		||||
    private String password;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Druid默认参数
 | 
			
		||||
     */
 | 
			
		||||
    private int initialSize = 2;
 | 
			
		||||
    private int maxActive = 10;
 | 
			
		||||
    private int minIdle = -1;
 | 
			
		||||
    private long maxWait = 60 * 1000L;
 | 
			
		||||
    private long timeBetweenEvictionRunsMillis = 60 * 1000L;
 | 
			
		||||
    private long minEvictableIdleTimeMillis = 1000L * 60L * 30L;
 | 
			
		||||
    private long maxEvictableIdleTimeMillis = 1000L * 60L * 60L * 7;
 | 
			
		||||
    private String validationQuery = "select 1";
 | 
			
		||||
    private int validationQueryTimeout = -1;
 | 
			
		||||
    private boolean testOnBorrow = false;
 | 
			
		||||
    private boolean testOnReturn = false;
 | 
			
		||||
    private boolean testWhileIdle = true;
 | 
			
		||||
    private boolean poolPreparedStatements = false;
 | 
			
		||||
    private int maxOpenPreparedStatements = -1;
 | 
			
		||||
    private boolean sharePreparedStatements = false;
 | 
			
		||||
    private String filters = "stat,wall";
 | 
			
		||||
 | 
			
		||||
    public String getDriverClassName() {
 | 
			
		||||
        return driverClassName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setDriverClassName(String driverClassName) {
 | 
			
		||||
        this.driverClassName = driverClassName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getUrl() {
 | 
			
		||||
        return url;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setUrl(String url) {
 | 
			
		||||
        this.url = url;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    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 int getInitialSize() {
 | 
			
		||||
        return initialSize;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setInitialSize(int initialSize) {
 | 
			
		||||
        this.initialSize = initialSize;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getMaxActive() {
 | 
			
		||||
        return maxActive;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setMaxActive(int maxActive) {
 | 
			
		||||
        this.maxActive = maxActive;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getMinIdle() {
 | 
			
		||||
        return minIdle;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setMinIdle(int minIdle) {
 | 
			
		||||
        this.minIdle = minIdle;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public long getMaxWait() {
 | 
			
		||||
        return maxWait;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setMaxWait(long maxWait) {
 | 
			
		||||
        this.maxWait = maxWait;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public long getTimeBetweenEvictionRunsMillis() {
 | 
			
		||||
        return timeBetweenEvictionRunsMillis;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setTimeBetweenEvictionRunsMillis(long timeBetweenEvictionRunsMillis) {
 | 
			
		||||
        this.timeBetweenEvictionRunsMillis = timeBetweenEvictionRunsMillis;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public long getMinEvictableIdleTimeMillis() {
 | 
			
		||||
        return minEvictableIdleTimeMillis;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setMinEvictableIdleTimeMillis(long minEvictableIdleTimeMillis) {
 | 
			
		||||
        this.minEvictableIdleTimeMillis = minEvictableIdleTimeMillis;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public long getMaxEvictableIdleTimeMillis() {
 | 
			
		||||
        return maxEvictableIdleTimeMillis;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setMaxEvictableIdleTimeMillis(long maxEvictableIdleTimeMillis) {
 | 
			
		||||
        this.maxEvictableIdleTimeMillis = maxEvictableIdleTimeMillis;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getValidationQuery() {
 | 
			
		||||
        return validationQuery;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setValidationQuery(String validationQuery) {
 | 
			
		||||
        this.validationQuery = validationQuery;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getValidationQueryTimeout() {
 | 
			
		||||
        return validationQueryTimeout;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setValidationQueryTimeout(int validationQueryTimeout) {
 | 
			
		||||
        this.validationQueryTimeout = validationQueryTimeout;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isTestOnBorrow() {
 | 
			
		||||
        return testOnBorrow;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setTestOnBorrow(boolean testOnBorrow) {
 | 
			
		||||
        this.testOnBorrow = testOnBorrow;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isTestOnReturn() {
 | 
			
		||||
        return testOnReturn;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setTestOnReturn(boolean testOnReturn) {
 | 
			
		||||
        this.testOnReturn = testOnReturn;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isTestWhileIdle() {
 | 
			
		||||
        return testWhileIdle;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setTestWhileIdle(boolean testWhileIdle) {
 | 
			
		||||
        this.testWhileIdle = testWhileIdle;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isPoolPreparedStatements() {
 | 
			
		||||
        return poolPreparedStatements;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setPoolPreparedStatements(boolean poolPreparedStatements) {
 | 
			
		||||
        this.poolPreparedStatements = poolPreparedStatements;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getMaxOpenPreparedStatements() {
 | 
			
		||||
        return maxOpenPreparedStatements;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setMaxOpenPreparedStatements(int maxOpenPreparedStatements) {
 | 
			
		||||
        this.maxOpenPreparedStatements = maxOpenPreparedStatements;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isSharePreparedStatements() {
 | 
			
		||||
        return sharePreparedStatements;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setSharePreparedStatements(boolean sharePreparedStatements) {
 | 
			
		||||
        this.sharePreparedStatements = sharePreparedStatements;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getFilters() {
 | 
			
		||||
        return filters;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setFilters(String filters) {
 | 
			
		||||
        this.filters = filters;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,20 @@
 | 
			
		||||
package com.cnbm.dynamic.datasource.properties;
 | 
			
		||||
 | 
			
		||||
import org.springframework.boot.context.properties.ConfigurationProperties;
 | 
			
		||||
 | 
			
		||||
import java.util.LinkedHashMap;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
@ConfigurationProperties(prefix = "dynamic")
 | 
			
		||||
public class DynamicDataSourceProperties {
 | 
			
		||||
    private Map<String, DataSourceProperties> datasource = new LinkedHashMap<>();
 | 
			
		||||
 | 
			
		||||
    public Map<String, DataSourceProperties> getDatasource() {
 | 
			
		||||
        return datasource;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setDatasource(Map<String, DataSourceProperties> datasource) {
 | 
			
		||||
        this.datasource = datasource;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -67,6 +67,11 @@
 | 
			
		||||
            <artifactId>ym-websocket</artifactId>
 | 
			
		||||
            <version>1.0-SNAPSHOT</version>
 | 
			
		||||
        </dependency>
 | 
			
		||||
	<dependency>
 | 
			
		||||
            <groupId>com.cnbm</groupId>
 | 
			
		||||
            <artifactId>ym-dynamic-datasource</artifactId>
 | 
			
		||||
            <version>1.0-SNAPSHOT</version>
 | 
			
		||||
        </dependency>
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>io.springfox</groupId>
 | 
			
		||||
            <artifactId>springfox-boot-starter</artifactId>
 | 
			
		||||
 
 | 
			
		||||
@@ -52,15 +52,15 @@ spring:
 | 
			
		||||
#        maximum-pool-size: 10
 | 
			
		||||
 | 
			
		||||
##多数据源的配置,需要引用renren-dynamic-datasource
 | 
			
		||||
#dynamic:
 | 
			
		||||
#  datasource:
 | 
			
		||||
#    slave1:
 | 
			
		||||
#      driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
 | 
			
		||||
#      url: jdbc:sqlserver://123456:1433;DatabaseName=renren_security
 | 
			
		||||
#      username: sa
 | 
			
		||||
#      password: 123456
 | 
			
		||||
#    slave2:
 | 
			
		||||
#      driver-class-name: org.postgresql.Driver
 | 
			
		||||
#      url: jdbc:postgresql://123456:5432/renren_security
 | 
			
		||||
#      username: postgres
 | 
			
		||||
#      password: 123456
 | 
			
		||||
dynamic:
 | 
			
		||||
  datasource:
 | 
			
		||||
    slave1:
 | 
			
		||||
      driver-class-name: com.mysql.cj.jdbc.Driver
 | 
			
		||||
      url: jdbc:mysql://mysql.picaiba.com:30307/mt_cigs4?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true
 | 
			
		||||
      username: root
 | 
			
		||||
      password: 1qaz@WSX3edc$RFV
 | 
			
		||||
    slave2:
 | 
			
		||||
      driver-class-name: com.mysql.cj.jdbc.Driver
 | 
			
		||||
      url: jdbc:mysql://mysql.picaiba.com:30307/mt_cigs4?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true
 | 
			
		||||
      username: root
 | 
			
		||||
      password: 1qaz@WSX3edc$RFV
 | 
			
		||||
@@ -19,7 +19,7 @@ public class CodeGenerator {
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void test(){
 | 
			
		||||
        mybatisPlusGenerator(new String[]{"t_test"});
 | 
			
		||||
        mybatisPlusGenerator(new String[]{"t_wo_power_level"});
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static void mybatisPlusGenerator(String[] include){
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,7 @@ import java.nio.file.Paths;
 | 
			
		||||
 * @Version 1.0
 | 
			
		||||
 */
 | 
			
		||||
public class DataConfig {
 | 
			
		||||
    public static final String url = "jdbc:mysql://mysql.picaiba.com:30307/ym_pass?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true";
 | 
			
		||||
    public static final String url = "jdbc:mysql://mysql.picaiba.com:30307/mt_cigs4?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true";
 | 
			
		||||
    public static final String username = "root";
 | 
			
		||||
    public static final String password = "1qaz@WSX3edc$RFV";
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -23,5 +23,10 @@
 | 
			
		||||
            <artifactId>ym-common</artifactId>
 | 
			
		||||
            <version>1.0-SNAPSHOT</version>
 | 
			
		||||
        </dependency>
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>com.cnbm</groupId>
 | 
			
		||||
            <artifactId>ym-dynamic-datasource</artifactId>
 | 
			
		||||
            <version>1.0-SNAPSHOT</version>
 | 
			
		||||
        </dependency>
 | 
			
		||||
    </dependencies>
 | 
			
		||||
</project>
 | 
			
		||||
		Reference in New Issue
	
	Block a user