我在 AWS ElasticbeansTalk 和两个 AWS RDS 数据库 shema 中部署了 Spring Boot 应用程序。在我的本地计算机上,两个数据库都可以工作。但是,在 elasticbeanstalk 环境中部署后,只有“crosscheckdbxr”正在工作,称为“主要”。从第二个数据库“sectiondbxr”我无法检索数据。您可以检查以下配置和建议吗?
Application.properties 配置,
spring.jpa.properties.hibernate.jdbc.time_zone=UTC
spring.jpa.generate-ddl=true
spring.db1.datasource.jdbc-url=jdbc:mysql://devdbxr.cnk8oyka2f9o.eu-central-1.rds.amazonaws.com:3306/crosscheckdbxr
spring.db1.datasource.username=admin
spring.db1.datasource.password=
spring.db1.datasource.member.driverClassName=com.mysql.cj.jdbc.Driver
spring.db2.datasource.jdbc-url=jdbc:mysql://devdbxr.cnk8oyka2f9o.eu-central-1.rds.amazonaws.com:3306/sectiondbxr
spring.db2.datasource.username=admin
spring.db2.datasource.password=
spring.db2.datasource.member.driverClassName=com.mysql.cj.jdbc.Driver
“crosscheckdbxr”的数据库配置,
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "userentityManagerFactory",
transactionManagerRef= "usertransactionManager", basePackages = {"com.xr.crosscheck.repository.user"})
public class UserConfig {
@Primary
@Bean(name = "datasource")
@ConfigurationProperties(prefix = "spring.db1.datasource")
public DataSource dataSource(){
return DataSourceBuilder.create().build();
}
@Primary
@Bean(name = "userentityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder, @Qualifier("datasource") DataSource dataSource){
HashMap<String,Object> properties = new HashMap<>();
properties.put("spring.jpa.hibernate.ddl-auto", "update");
properties.put("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
return builder.dataSource(dataSource)
.properties(properties)
.packages("com.xr.crosscheck.model")
.persistenceUnit("db1")
.build();
}
@Primary
@Bean(name = "usertransactionManager")
public PlatformTransactionManager transactionManager(@Qualifier("userentityManagerFactory")EntityManagerFactory entityManagerFactory){
return new JpaTransactionManager(entityManagerFactory);
}
}
“sectiondbxr”的数据库配置,
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "sectionEntityManagerFactory",
transactionManagerRef= "sectionTransactionManager", basePackages = {"com.xr.crosscheck.repository.section"})
public class SteelSectionConfig {
@Bean(name = "sectionDataSource")
@ConfigurationProperties(prefix = "spring.db2.datasource")
public DataSource dataSource(){
return DataSourceBuilder.create().build();
}
@Bean(name = "sectionEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean SectionEntityManagerFactory(EntityManagerFactoryBuilder builder, @Qualifier("sectionDataSource") DataSource dataSource){
HashMap<String,Object> properties = new HashMap<>();
properties.put("spring.jpa.hibernate.ddl-auto", "validate");
properties.put("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
return builder.dataSource(dataSource)
.properties(properties)
.packages("com.xr.crosscheck.model")
.persistenceUnit("db2")
.build();
}
@Bean(name = "sectionTransactionManager")
public PlatformTransactionManager SteelTransactionManager(@Qualifier("sectionEntityManagerFactory")EntityManagerFactory SectionEntityManagerFactory){
return new JpaTransactionManager(SectionEntityManagerFactory);
}
}
示例存储库,
@Repository
public interface CSectionsRepository extends JpaRepository<CSections, Long> {
@Query(value = "SELECT SECTION from sectiondbxr.C", nativeQuery = true)
List<String> getAllColumn();
@Query(value = "SELECT * from sectiondbxr.C u where u.section = ?1", nativeQuery = true)
CSections findBySection(String sectionN);
}
我已经通过将数据库列标题设置为大写字母来解决。读取数据库时出现问题。用大写字母更改列标题后,数据检索工作正常。