Spring boot Spring启动-每个租户连接两个架构
我正在创建一个Spring boot多模块应用程序,其中一个模块有独特的需求。模块应该能够连接到一个固定模式,比如S1,还有两个模式S2和S3。 根据区域的不同,它将连接到S1和S2或S1和S3 在这里我必须遵循多租户方法吗Spring boot Spring启动-每个租户连接两个架构,spring-boot,spring-data-jpa,multi-tenant,Spring Boot,Spring Data Jpa,Multi Tenant,我正在创建一个Spring boot多模块应用程序,其中一个模块有独特的需求。模块应该能够连接到一个固定模式,比如S1,还有两个模式S2和S3。 根据区域的不同,它将连接到S1和S2或S1和S3 在这里我必须遵循多租户方法吗 如果是,我如何使用多租户连接到特定请求的两个架构?根据我的理解,您希望连接到基于国家/地区的不同数据库。我的项目中也有类似的问题 我的要求是,当有json请求时,我需要从该请求中获取国家代码,并基于该请求,我将连接到特定于该国家的数据库。下面是我的代码。希望这对你有帮助 应
如果是,我如何使用多租户连接到特定请求的两个架构?根据我的理解,您希望连接到基于国家/地区的不同数据库。我的项目中也有类似的问题 我的要求是,当有json请求时,我需要从该请求中获取国家代码,并基于该请求,我将连接到特定于该国家的数据库。下面是我的代码。希望这对你有帮助 应用程序属性
spring.main.web-application-type=none
#spring.main.allow-bean-definition-overriding=true
#au DB connection
spring.datasource.au.url=
spring.datasource.au.username=
spring.datasource.au.password=
#cn DB connection
spring.datasource.cn.url=
spring.datasource.cn.username=
spring.datasource.cn.password=
spring.jpa.show-sql=true
spring.jpa.database=default
spring.jpa.hibernate.ddl-auto=none
spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyHbmImpl
spring.jpa.hibernate.naming.physical-strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
数据库配置
非盟:
这里我使用@Primary注释来表示AU
@Configuration
@EnableJpaRepositories(entityManagerFactoryRef = "auEntityManagerFactory", transactionManagerRef = "auTransactionManager", basePackages = "com.dbs.multiDb.au.repository")
@EnableTransactionManagement
public class auDsConfig {
Logger logger = LogManager.getLogger(this.getClass());
@Autowired
Environment env;
@Bean(name = "auEntityManagerFactory")
@Primary
public LocalContainerEntityManagerFactoryBean cnEntityManagerFactory(final EntityManagerFactoryBuilder builder,
final @Qualifier("au-db") DataSource dataSource) {
return builder.dataSource(dataSource).packages("com.dbs.multiDb.domain").persistenceUnit("auDb")
.properties(singletonMap("hibernate.hbm2ddl.auto", "none")).build();
}
@Bean(name = "auTransactionManager")
@Primary
public PlatformTransactionManager auTransactionManager(
@Qualifier("auEntityManagerFactory") EntityManagerFactory cnEntityManagerFactory) {
return new JpaTransactionManager(cnEntityManagerFactory);
}
@SuppressWarnings("unused")
@Bean(name = "au-db")
@Primary
@ConfigurationProperties(prefix = "spring.datasource.au")
public DataSource auDataSource() {
DriverManagerDataSource dbFinal = new DriverManagerDataSource();
dbFinal.setDriverClassName(env.getProperty("jdbc.driverClassName"));
dbFinal.setUrl(env.getProperty("spring.datasource.au.url"));
dbFinal.setUsername(env.getProperty("spring.datasource.au.username"));
dbFinal.setPassword(env.getProperty("spring.datasource.au.password"));
return dbFinal;
}
}
CN数据库配置:
@Configuration
@EnableJpaRepositories(entityManagerFactoryRef = "cnEntityManagerFactory", transactionManagerRef = "cnTransactionManager", basePackages = "com.dbs.multiDb.cn.repository")
@EnableTransactionManagement
public class cnDsConfig {
@Bean(name = "cnEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean cnEntityManagerFactory(final EntityManagerFactoryBuilder builder,
final @Qualifier("cn-db") DataSource dataSource) {
return builder.dataSource(dataSource).packages("com.dbs.multiDb.domain").persistenceUnit("cnDb")
.properties(singletonMap("hibernate.hbm2ddl.auto", "none")).build();
}
@Bean(name = "cnTransactionManager")
public PlatformTransactionManager cnTransactionManager(
@Qualifier("cnEntityManagerFactory") EntityManagerFactory cnEntityManagerFactory) {
return new JpaTransactionManager(cnEntityManagerFactory);
}
@Bean(name = "cn-db")
@ConfigurationProperties(prefix = "spring.datasource.cn")
public DataSource cnDataSource() {
DriverManagerDataSource dbFinal = new DriverManagerDataSource();
dbFinal.setDriverClassName(env.getProperty("jdbc.driverClassName"));
dbFinal.setUrl(env.getProperty("spring.datasource.cn.url"));
dbFinal.setUsername(env.getProperty("spring.datasource.cn.username"));
dbFinal.setPassword(env.getProperty("spring.datasource.cn.password"));
return dbFinal;
}
}
为两国创建了回购协议:
非盟回购:
@Repository
public interface AURepository extends CrudRepository<BeanName,String>{
}
@存储库
公共界面Auresitory扩展CrudResitory{
}
中国回购:
@Repository
public interface CNRepository extends CrudRepository<BeanName,String>{
}
@存储库
公共接口CNRepository扩展了Crudepository{
}
服务类别:
@Service
public class ServiceClass{
private AURepository auTxn;
private CNRepository cnTxn;
@Autowired
public ServiceClass(AURepository auTxn, CNRepository cnTxn) {
super();
this.auTxn = auTxn;
this.cnTxn = cnTxn;
}
public List<Bean> getData(String input, String country) {
List<Bean> data= new ArrayList<Bean>();
//If this is AU then it will connect to AU DB and retrieve data.
if (country.equals("AU")) {
data= auTxn.findall();
}
//If this is CN then it will connect to AU DB and retrieve data.
else if (country.equals("CN")) {
data= cnTxn.findall();
}
return data;
}
}
@服务
公共类服务类{
私人金黄色auTxn;
私有CNXN;
@自动连线
公共服务类(金色auTxn、CNXN){
超级();
this.auTxn=auTxn;
this.cnTxn=cnTxn;
}
公共列表getData(字符串输入,字符串国家/地区){
列表数据=新的ArrayList();
//如果这是AU,那么它将连接到AU DB并检索数据。
if(国家等于(“AU”)){
data=auTxn.findall();
}
//如果这是CN,那么它将连接到AU DB并检索数据。
如果(国家等于(“CN”)){
data=cnTxn.findall();
}
返回数据;
}
}