私は、DATAJPAリポジトリと2つのデータソースでspring-bootを使用します。 1つのデータソースはMySQL DBに接続し、2番目のデータソースはファイルベースの埋め込みH2 DBに接続します。データ・ソースURLを変更した後にスプリング・ブートを使用してデータベース表を作成する方法
H2 DBで、アプリケーションの実行中にURLを変更したいと思います。 URLの変更作業と変更後に、既存のDBバネにURLを入力するとDBが作成されます。しかし、テーブルは作成されず、スプリングは私にTable "SYMBOL" not found; SQL statement:
のようなエラーを与えます。 私は今すぐ私のアプリケーションを再起動すると、新しいURLでテーブルを作成し、すべて正常に動作します。
URLを変更してテーブルを作成する方法はありますか?
URLを変更するには、自分のデータソースを作成し、各接続時に新しいデータソースを作成します。
ここpublic class ProjectDataSource extends AbstractDataSource {
@Autowired ToolService toolService;
@Override
public Connection getConnection() throws SQLException {
return determineTargetDataSource().getConnection();
}
@Override
public Connection getConnection(String username, String password) throws SQLException {
return determineTargetDataSource().getConnection(username, password);
}
@ConfigurationProperties(prefix = "project.datasource")
private DataSource determineTargetDataSource() {
String projectName = toolService.get().getProjectName();
String url = "jdbc:h2:file:../db/" + projectName;
return DataSourceBuilder
.create()
.url(url)
.build();
}
}
ここで設定
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = "projectEntityManagerFactory",
transactionManagerRef = "projectTransactionManager",
basePackages = {"at.ltw.test.bz.model.project"})
public class ProjectDbConfiguration {
@Bean(name = "projectDataSource")
public DataSource dataSource() {
return new ProjectDataSource();
}
@Bean(name = "projectEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean
barEntityManagerFactory(
EntityManagerFactoryBuilder builder,
@Qualifier("projectDataSource") DataSource dataSource
) {
HibernateJpaVendorAdapter jpaVendorAdapter = new HibernateJpaVendorAdapter();
jpaVendorAdapter.setGenerateDdl(true);
return builder
.dataSource(dataSource)
.packages("at.ltw.test.bz.model.project")
.persistenceUnit("bzProject")
.properties(jpaVendorAdapter.getJpaPropertyMap())
.build();
}
@Bean(name = "projectTransactionManager")
public PlatformTransactionManager barTransactionManager(
@Qualifier("projectEntityManagerFactory") EntityManagerFactory projectEntityManagerFactory) {
return new JpaTransactionManager(projectEntityManagerFactory);
}
}
私application.properties
#jpa
spring.jpa.hibernate.ddl-auto=update
spring.jpa.generate-ddl=true
#tool database
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost/ltw?useSSL=false
spring.datasource.username=ltw
spring.datasource.password=password
#project database
project.datasource.driver-class-name=org.h2.Driver
#logging
logging.level.at.ltw = trace
誰かが私を助け、私の悪い英語のため申し訳ありませんことを願って...