2017-09-04 2 views
1

Ich möchte EntityManager in SpringBoot verwenden.Verwenden Sie EntityManager in Springboot

Anwendung

@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 

Ich versuche https://github.com/snicoll-demos/demo-multi-entity-managers/blob/master/src/main/java/demo/order/OrderConfig.java zu implementieren folgenden, aber meine SpringBoot sofort stoppen, ohne jede Ausnahme zu werfen. Wenn ich MailConfig entferne, kann Springboot starten. Was ist das Problem ? Bin ich auf dem richtigen Weg?

+0

Warum Sie alles selbst zu konfigurieren sind stattdessen die Spring-Konfiguration zu verwenden. Grundsätzlich sind all Ihre 'spring.datasource' und' spring.jpa' Eigenschaften deswegen nutzlos. Ich würde sagen, arbeite mit dem Framework statt um es herum. –

+0

@M.Deinum Was sollte ich ändern, damit ich EntityManager in MailService verwenden kann? –

+1

Löschen Sie Ihre 'MailConfig', entfernen Sie' @ EnableJpaRepositories', '@ EnableAspectJAutoProxy' und' @Configuration' aus Ihrer Anwendungsklasse. All dies ist bereits für Spring Boot erledigt. –

Antwort

1

Ich denke, Sie haben die Werte der Datenquelle nicht festgelegt. Sie müssen die Eigenschaften "app.order.jpa" und "app.order.datasource" in application.properties festlegen, damit das Beispiel funktioniert.

über Konfigurationseigenschaften können Sie hier lesen:

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

das Beispiel Siehe hier:

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

aber ich benutze den Frühling. Kann das funktionieren? –

+0

Ja, es wird funktionieren. Sie verwenden sie bereits in @ConfigurationProperties (prefix = "app.order.datasource"), setzen diese jedoch nicht. –

+0

Kein wirklich verstanden><. Wenn ich Entity Manager im Spring Boot verwenden möchte, was soll ich ändern? –