2017-09-04 9 views
1

SpringBootに使用します。SpringbootでEntityManagerを使用する

アプリケーション

@Configuration 
@EnableRetry // To enable Spring retry 
@EnableJpaRepositories 
@EnableAspectJAutoProxy(proxyTargetClass=true) 
@SpringBootApplication 
public class Application { 

    public static void main(String[] args) { 
     SpringApplication.run(Application.class, args); 
    } 

    @Bean 
    public RestTemplate restTemplate() { 
     return new RestTemplate(); 
    }  
} 

MailConfig

@Configuration 
@EnableJpaRepositories(
     entityManagerFactoryRef = "mailEntityManager", 
     transactionManagerRef = "mailTransactionManager", 
     basePackageClasses = MmcMonitoringLog.class) 

public class MailConfig { 

    @Autowired(required = false) 
    private PersistenceUnitManager persistenceUnitManager; 

    @Bean 
    @ConfigurationProperties("app.order.jpa") 
    public JpaProperties orderJpaProperties() { 
     return new JpaProperties(); 
    } 

    @Bean 
    @ConfigurationProperties(prefix = "app.order.datasource") 
    public DataSource orderDataSource() { 
     return (DataSource) DataSourceBuilder.create().type(DataSource.class).build(); 
    } 

    @Bean 
    public LocalContainerEntityManagerFactoryBean orderEntityManager(
      JpaProperties orderJpaProperties) { 
     EntityManagerFactoryBuilder builder = createEntityManagerFactoryBuilder(orderJpaProperties); 
     return builder 
       .dataSource(orderDataSource()) 
       .packages(MmcMonitoringLog.class) 
       .persistenceUnit("ordersDs") 
       .build(); 
    } 

    @Bean 
    public JpaTransactionManager orderTransactionManager(EntityManagerFactory orderEntityManager) { 
     return new JpaTransactionManager(orderEntityManager); 
    } 

    private EntityManagerFactoryBuilder createEntityManagerFactoryBuilder(JpaProperties customerJpaProperties) { 
     JpaVendorAdapter jpaVendorAdapter = createJpaVendorAdapter(customerJpaProperties); 
     return new EntityManagerFactoryBuilder(jpaVendorAdapter, 
       customerJpaProperties.getProperties(), this.persistenceUnitManager); 
    } 

    private JpaVendorAdapter createJpaVendorAdapter(JpaProperties jpaProperties) { 
     AbstractJpaVendorAdapter adapter = new HibernateJpaVendorAdapter(); 
     adapter.setShowSql(jpaProperties.isShowSql()); 
     adapter.setDatabase(jpaProperties.getDatabase()); 
     adapter.setDatabasePlatform(jpaProperties.getDatabasePlatform()); 
     adapter.setGenerateDdl(jpaProperties.isGenerateDdl()); 
     return adapter; 
    } 

} 

mailserviceと

public class MailService extends TaskAdaptor implements Runnable { 

    @Autowired 
    MmcMonitoringLogRepository mmcMonitoringLogRepository; 

    @Override 
    public void run() { 

    List<MmcMonitoringLog> list = mmcMonitoringLogRepository.findByMonitoringLog("1"); 
    ...... 
} 

appication.properties

spring.datasource.url= jdbc:mysql://xxxx:3306/adb?autoReconnect=true&useSSL=false 
spring.datasource.username=xxx 
spring.datasource.password=xxx 


# The SQL dialect makes Hibernate generate better SQL for the chosen database 
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect 

# Hibernate ddl auto (create, create-drop, update) 
spring.jpa.hibernate.ddl-auto = none 

は私がhttps://github.com/snicoll-demos/demo-multi-entity-managers/blob/master/src/main/java/demo/order/OrderConfig.javaを以下の実装しようが、私のSpringBootは、任意の例外がスローされることなく、すぐに停止します。 MailConfigを削除すると、Springbootが起動します。どうしたの ?私は正しい道にいますか?

+0

をなぜあなたは代わりにSpring構成を使用するすべてのものを自分で設定しています。基本的に、あなたの 'spring.datasource'と' spring.jpa'プロパティはすべてこれのために役に立たないのです。私はフレームワークではなく、フレームワークで作業すると言います。 –

+0

@ M.Deinum mailServiceでEntityManagerを使用できるように変更する必要はありますか? –

+1

'MailConfig'を削除し、アプリケーションクラスから' @ EnableJpaRepositories'、 '@ EnableAspectJAutoProxy'、' @ Configuration'を削除してください。そのすべてはすでにSpring Bootによってあなたのために行われています。 –

答えて

1

私はdatasourceの値を設定していないと思います。このサンプルを動作させるには、application.propertiesに "app.order.jpa"と "app.order.datasource"プロパティを設定する必要があります。あなたはここで読むことができます構成プロパティについて

http://www.baeldung.com/configuration-properties-in-spring-boot

は、ここで例を参照してください:

https://github.com/snicoll-demos/demo-multi-entity-managers/blob/master/src/main/resources/application.properties

app.customer.datasource.url=jdbc:h2:mem:customers;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE 
app.customer.datasource.driver-class-name=org.h2.Driver 
app.customer.jpa.properties.hibernate.hbm2ddl.auto=create 

app.order.datasource.url=jdbc:h2:mem:orders;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE 
app.order.datasource.driver-class-name=org.h2.Driver 
app.order.jpa.properties.hibernate.hbm2ddl.auto=create 
+0

しかし、私は春を使用しています。これはできますか? –

+0

はい、動作します。 @ConfigurationProperties(prefix = "app.order.datasource")で既にそれらを使用していますが、それらは設定していません。 –

+0

本当にそれを得る><。 SpringブートでEntity Managerを使用したい場合は、何を変更する必要がありますか? –

関連する問題