2017-10-08 1 views
0

Ich verwende Spring-Daten JPA, und die Datenquelle, Entity Manager und Hibernate Config in einer Java-Klasse anstelle von XML definiert. Hier ist meine Klasse:Load Persistence Konfigurationsdatei im Frühjahr Daten jpa

import javax.persistence.EntityManagerFactory; 
import javax.sql.DataSource; 

import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.data.jpa.repository.config.EnableJpaRepositories; 
import org.springframework.jdbc.datasource.DriverManagerDataSource; 
import org.springframework.orm.jpa.JpaTransactionManager; 
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; 
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; 
import org.springframework.transaction.PlatformTransactionManager; 
import org.springframework.transaction.annotation.EnableTransactionManagement; 

@Configuration 
@EnableJpaRepositories("com.test.user.repository") 
@EnableTransactionManagement 
public class ApplicationConfig { 

    @Bean 
    public DataSource dataSource() { 
     DriverManagerDataSource dataSource = new DriverManagerDataSource(); 
     dataSource.setDriverClassName("oracle.jdbc.OracleDriver"); 
     dataSource.setUrl("xxx"); 
     dataSource.setUsername("xxx"); 
     dataSource.setPassword("xxx"); 
     return dataSource; 
    } 


    @Bean 
    public EntityManagerFactory entityManagerFactory() { 
     HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); 
     vendorAdapter.setGenerateDdl(true); 
     LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean(); 
     factory.setJpaVendorAdapter(vendorAdapter); 
     factory.setPackagesToScan("com.test.user.repository.domain"); 
     factory.setDataSource(dataSource()); 
     factory.afterPropertiesSet(); 
     return factory.getObject(); 
    } 

    @Bean 
    public PlatformTransactionManager transactionManager() { 
     JpaTransactionManager txManager = new JpaTransactionManager(); 
     txManager.setEntityManagerFactory(entityManagerFactory()); 
     return txManager; 
    } 
} 

Meine Frage ist, muss ich eine Bean-Definition für diese Config-Klasse erstellen? Wie wird es beim Start der Anwendung geladen? Wir verwenden keine Spring Boot, es gibt keine Hauptmethode etc.

Antwort

0

Sie können entweder in web.xml oder WebApplicationInitializer konfigurieren, so dass Sie Ihren Root-Kontext mit Ihrer anderen Art von Konfigurationsdatei einrichten können. siehe Beispiel unten

public class WebAppInitializer implements WebApplicationInitializer { 
    private static final Logger LOG = LoggerFactory.getLogger(WebAppInitializer.class); 

    @Override 
    public void onStartup(ServletContext container) throws ServletException { 
     AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext(); 
     rootContext.register(AppConfig.class,PersistenceConfig.class,SecurityConfig.class); 
//  rootContext.register(AppConfig.class); 

     container.addListener(new ContextLoaderListener(rootContext)); 

     AnnotationConfigWebApplicationContext dispatcherServlet = new AnnotationConfigWebApplicationContext(); 
     dispatcherServlet.register(MvcConfig.class); 

     ... 
} 

Oder Sie können einfach registrieren Ihre AppConfig Klasse und legen Sie es auf das Paket zu scannen (com.example.config), wo PersistenceConfig befindet sich in den Konfigurations-Bean geladen werden, die mit @Configuration mit Anmerkungen versehen .

@Configuration 
@ComponentScan(basePackages={"com.example.config","com.example.validator","com.example.service", "com.example.security","com.example.aspect"}) 
@PropertySource(value = {"classpath:application.properties" }) 

public class AppConfig { 
    .... 
} 

Lassen Sie mich wissen, wenn meine Antwort nicht klar ist, kann ich Ihnen mehr darüber erzählen.

Dieser Link könnte Ihnen bei der Initialisierung der Federwebapplikation helfen http://www.baeldung.com/spring-xml-vs-java-config

Verwandte Themen