Spring Data Jpa 实体自动创建在entityManagerFactory定义后不工作

vsdwdz23  于 5个月前  发布在  Spring
关注(0)|答案(1)|浏览(72)

我有一个Spring-Jpa的工作代码。最近我有一个需求,我必须添加多个对象,并且为了相同的目的,我必须定义实体ManagerFactory。(代码如下).由于我添加此实体的时间(表)不会自动创建或不被应用程序识别.我的项目使用Spring父2.7.13 .我尝试了它与较新版本的Spring(3.1.3)它工作正常。有人能帮我出什么问题,有什么我错过了。我已经验证了包,它是好的。此外,在这个新的类被添加之前,它工作正常。

@Configuration
public class DataSourceConfig {

    // Primary datasource configuration

    @Primary
    @Bean(name = "primaryDataSource")
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource primaryDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Primary
    @Bean(name = "entityManagerFactory")
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder, @Qualifier("primaryDataSource") DataSource dataSource) {
        return builder
                .dataSource(dataSource)
                .packages("com.example.demo.model") // base package for your JPA entities
                .persistenceUnit("primary")
                .build();
    }

    @Primary
    @Bean(name = "transactionManager")
    public PlatformTransactionManager transactionManager(@Qualifier("entityManagerFactory") EntityManagerFactory entityManagerFactory) {
        return new JpaTransactionManager(entityManagerFactory);
    }

    // Secondary Datasource 1 Configuration

    @Bean(name = "secondaryDataSource")
    @ConfigurationProperties(prefix = "spring.ds1")
    public DataSource secondaryDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "secondaryJdbcTemplate")
    public JdbcTemplate secondaryJdbcTemplate(@Qualifier("secondaryDataSource") DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }

    // Secondary Datasource 2 Configuration

    @Bean(name = "thirdDataSource")
    @ConfigurationProperties(prefix = "spring.ds2")
    public DataSource thirdDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "thirdJdbcTemplate")
    public JdbcTemplate thirdJdbcTemplate(@Qualifier("thirdDataSource") DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }
}

字符串

1tu0hz3e

1tu0hz3e1#

对我有效的方法是:
1.我为每个数据库/用户创建了一个文件夹,我希望我的应用程序连接。例如,如果你想连接到2个数据库(db 1,db2),我创建了2个文件夹db 1和db2。
1.在这些文件夹中,我创建了一个Entity文件夹(我将对应的数据库实体放在其中),一个Repository文件夹,一个Service文件夹和一个Config文件夹。
1.在Config文件夹中,我创建了DB1_Config.java文件(DB1_Config用于db 1,DB2_Config用于db2)

  1. DB1_Config.java**文件如下所示
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
     entityManagerFactoryRef = "DB1userEntityManagerFactory",
     transactionManagerRef = "DB1userTransactionManager",
     basePackages = {"com.DataBase.DB1.user.Repository"}) //put the actual path to your Repository folder
public class DB1_Config{

 static final String JNDI = "jdbc/DB1user"; //your actual jndi name

 @Bean(name = "DB1userDataSource", destroyMethod = "")
 @ConfigurationProperties(prefix = "DB1user.datasource")
 public DataSource dataSource() throws DataSourceLookupFailureException {
     JndiDataSourceLookup dataSourceLookup = new JndiDataSourceLookup();
     return dataSourceLookup.getDataSource(JNDI);
 }

 @Bean(name = "DB1userEntityManagerFactory")
 public LocalContainerEntityManagerFactoryBean
         entityManagerFactory(
                 EntityManagerFactoryBuilder builder,
                 @Qualifier("DB1userDataSource") DataSource dataSource) {
     return builder.dataSource(dataSource).packages("com.DataBase.DB1.user.Entity").persistenceUnit("db1user").build();
 } //in com.DataBase.DB1.user.Entity put your actual Entity path

 @Bean(name = "DB1userTransactionManager")
 public PlatformTransactionManager entityTransactionManager(
         @Qualifier("DB1userEntityManagerFactory") EntityManagerFactory entityManagerFactory) {
     return new JpaTransactionManager(entityManagerFactory);
 }
}

字符串
和DB2_Config一样,但是无论它写DB 1,你都要把DB2放在哪里。我认为主要的问题是你必须根据不同的数据库对你的类进行分组,或者如果你在不同模式用户的同一个数据库上**。

相关问题