1.集成多数据源配置

2.增加九州数据源
master
董哲奇 1 year ago
parent 91d029713f
commit bd7539b3d6

@ -0,0 +1,26 @@
package com.dsic.gj_erp.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import javax.sql.DataSource;
@Configuration
public class DynamicDataSourceConfig {
@Primary
@Bean("masterDataSource")
@ConfigurationProperties("spring.datasource.master")
public DataSource masterDataSource() {
return DataSourceBuilder.create().build();
}
@Bean("jiuzhouDataSource")
@ConfigurationProperties("spring.datasource.jiuzhou")
public DataSource jiuzhouDataSource() {
return DataSourceBuilder.create().build();
}
}

@ -0,0 +1,96 @@
package com.dsic.gj_erp.config;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import org.hibernate.boot.model.naming.Identifier;
import org.hibernate.boot.model.naming.PhysicalNamingStrategy;
import org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl;
import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.jdbc.datasource.init.DataSourceInitializer;
import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.PlatformTransactionManager;
import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;
import java.util.Properties;
@Configuration
@EnableJpaRepositories(
basePackages = "com.dsic.gj_erp",
entityManagerFactoryRef = "manEntityManagerFactory",
transactionManagerRef = "manTransactionManager"
)
public class JapConfig {
@Autowired
private Environment env; //1
@Bean
@ConfigurationProperties(prefix = "spring.datasource.master")
public DataSourceProperties japDataSourceProperties() {
return new DataSourceProperties();
}
@Bean("jpaDataSource")
public DataSource jpaDataSource() {
DataSourceProperties manDataSourceProperties = japDataSourceProperties();
return DataSourceBuilder.create()
.driverClassName(manDataSourceProperties.getDriverClassName())
.url(manDataSourceProperties.getUrl())
.username(manDataSourceProperties.getUsername())
.password(manDataSourceProperties.getPassword())
.build();
}
@Bean
public PlatformTransactionManager manTransactionManager() { //4
EntityManagerFactory factory = manEntityManagerFactory().getObject();
return new JpaTransactionManager(factory);
}
@Bean
public PhysicalNamingStrategy physicalNamingStrategy() {
return new PhysicalNamingStrategyStandardImpl() {
@Override
public Identifier toPhysicalTableName(Identifier name, JdbcEnvironment jdbcEnvironment) {
return Identifier.toIdentifier(StringUtils.camelToUnderline(name.getText()));
}
};
}
@Bean
public LocalContainerEntityManagerFactoryBean manEntityManagerFactory() {
LocalContainerEntityManagerFactoryBean factory =
new LocalContainerEntityManagerFactoryBean();
factory.setDataSource(jpaDataSource());
factory.setPackagesToScan("com.dsic.gj_erp");
factory.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
Properties jpaProperties = new Properties();
//设置控制台打印sql
jpaProperties.put("hibernate.show_sql", env.getProperty("hibernate.show_sql"));
//字段驼峰转下划线
jpaProperties.put("hibernate.physical_naming_strategy", env.getProperty("hibernate.naming.physical_strategy"));
factory.setJpaProperties(jpaProperties);
return factory;
}
@Bean
public DataSourceInitializer manDataSourceInitializer() {//6
DataSourceInitializer dsInitializer = new DataSourceInitializer();
dsInitializer.setDataSource(jpaDataSource());
ResourceDatabasePopulator dbPopulator = new ResourceDatabasePopulator();
dsInitializer.setDatabasePopulator(dbPopulator);
dsInitializer.setEnabled(env.getProperty("spring.datasource.master.initialize",
Boolean.class, false));
return dsInitializer;
}
}

@ -0,0 +1,64 @@
package com.dsic.gj_erp.config;
import com.baomidou.mybatisplus.core.MybatisConfiguration;
import com.baomidou.mybatisplus.core.MybatisXMLLanguageDriver;
import com.baomidou.mybatisplus.core.config.GlobalConfig;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import com.github.jeffreyning.mybatisplus.base.MppSqlInjector;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.type.JdbcType;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
@MapperScan(basePackages = {"com.dsic.gj_erp.jiuzhoumapper"}, sqlSessionTemplateRef = "jiuzhouSqlSessionTemplate")
@Configuration
public class MyBatisPlusConfigJiuZhou {
@Bean("jiuzhouSqlSessionFactory")
public SqlSessionFactory jiuzhouSqlSessionFactory(@Qualifier("jiuzhouDataSource") DataSource dataSource, MppSqlInjector mppSqlInjector) throws Exception {
MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();
sqlSessionFactory.setDataSource(dataSource);
MybatisConfiguration configuration = new MybatisConfiguration();
configuration.setDefaultScriptingLanguage(MybatisXMLLanguageDriver.class);
configuration.setJdbcTypeForNull(JdbcType.NULL);
configuration.setMapUnderscoreToCamelCase(true);
sqlSessionFactory.setConfiguration(configuration);
sqlSessionFactory.setTypeAliasesPackage("com.dsic.gj_erp.bean");
sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().
getResources("classpath:mappers/*/*.xml"));
sqlSessionFactory.setPlugins(new PaginationInterceptor());
sqlSessionFactory.setGlobalConfig(globalConfig(mppSqlInjector));
return sqlSessionFactory.getObject();
}
@Bean(name = "jiuzhouTransactionManager")
public DataSourceTransactionManager jiuzhouTransactionManager(@Qualifier("jiuzhouDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "jiuzhouSqlSessionTemplate")
public SqlSessionTemplate jiuzhouSqlSessionTemplate(@Qualifier("jiuzhouSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
public GlobalConfig globalConfig(MppSqlInjector mppSqlInjector) {
GlobalConfig globalConfig = new GlobalConfig();
GlobalConfig.DbConfig dbConfig = new GlobalConfig.DbConfig();
globalConfig.setDbConfig(dbConfig);
globalConfig.setSqlInjector(mppSqlInjector);
globalConfig.setBanner(false);
return globalConfig;
}
}

@ -0,0 +1,68 @@
package com.dsic.gj_erp.config;
import com.baomidou.mybatisplus.core.MybatisConfiguration;
import com.baomidou.mybatisplus.core.MybatisXMLLanguageDriver;
import com.baomidou.mybatisplus.core.config.GlobalConfig;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import com.github.jeffreyning.mybatisplus.base.MppSqlInjector;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.type.JdbcType;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
@MapperScan(basePackages = {"com.dsic.gj_erp.mapper"}, sqlSessionTemplateRef = "masterSqlSessionTemplate")
@Configuration
public class MyBatisPlusConfigMaster {
@Primary
@Bean("masterSqlSessionFactory")
public SqlSessionFactory masterSqlSessionFactory(@Qualifier("masterDataSource") DataSource dataSource, MppSqlInjector mppSqlInjector) throws Exception {
MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();
sqlSessionFactory.setDataSource(dataSource);
MybatisConfiguration configuration = new MybatisConfiguration();
configuration.setDefaultScriptingLanguage(MybatisXMLLanguageDriver.class);
configuration.setJdbcTypeForNull(JdbcType.NULL);
configuration.setMapUnderscoreToCamelCase(true);
sqlSessionFactory.setConfiguration(configuration);
sqlSessionFactory.setTypeAliasesPackage("com.dsic.gj_erp.bean");
sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().
getResources("classpath:mappers/*/*.xml"));
sqlSessionFactory.setPlugins(new PaginationInterceptor());
sqlSessionFactory.setGlobalConfig(globalConfig(mppSqlInjector));
return sqlSessionFactory.getObject();
}
@Primary
@Bean(name = "masterTransactionManager")
public DataSourceTransactionManager masterTransactionManager(@Qualifier("masterDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Primary
@Bean(name = "masterSqlSessionTemplate")
public SqlSessionTemplate masterSqlSessionTemplate(@Qualifier("masterSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
public GlobalConfig globalConfig(MppSqlInjector mppSqlInjector) {
GlobalConfig globalConfig = new GlobalConfig();
GlobalConfig.DbConfig dbConfig = new GlobalConfig.DbConfig();
globalConfig.setDbConfig(dbConfig);
globalConfig.setSqlInjector(mppSqlInjector);
globalConfig.setBanner(false);
return globalConfig;
}
}

@ -0,0 +1,39 @@
package com.dsic.gj_erp.config;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import org.hibernate.boot.model.naming.Identifier;
import org.hibernate.boot.model.naming.PhysicalNamingStrategy;
import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
public class MyPhysicalNamingStrategy implements PhysicalNamingStrategy {
@Override
public Identifier toPhysicalCatalogName(Identifier name, JdbcEnvironment jdbcEnvironment) {
return name;
}
@Override
public Identifier toPhysicalSchemaName(Identifier name, JdbcEnvironment jdbcEnvironment) {
return name;
}
@Override
public Identifier toPhysicalTableName(Identifier name, JdbcEnvironment jdbcEnvironment) {
return name;
}
@Override
public Identifier toPhysicalSequenceName(Identifier name, JdbcEnvironment jdbcEnvironment) {
return name;
}
@Override
public Identifier toPhysicalColumnName(Identifier name, JdbcEnvironment jdbcEnvironment) {
//用数组列出所有大写字母
String[] chars = new String[]{"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};
if (StrUtil.startWithAny(name.getText(), chars)) {
return name;
}
return Identifier.toIdentifier(StringUtils.camelToUnderline(name.getText()));
}
}
Loading…
Cancel
Save