Ich habe konfiguriert und arbeite Frühling basierte REST-Anwendung, aber jetzt würde Ich mag es konvertieren zum Frühling-Boot.Konvertieren bestehenden Frühling Anwendung Spring-Boot
Meine Anwendung verwendet Frühlings-Data-PPV auf der JPA-Datenquelle mit Hibernate Anbietern:
@Configuration
@EnableJpaRepositories("foo.bar.web.repository")
@EnableTransactionManagement
public class RepositoryConfig {
// properties ommited
@Bean
public DataSource dataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName(className);
dataSource.setUrl(url);
dataSource.setUsername(userName);
dataSource.setPassword(password);
return dataSource;
}
@Bean
public EntityManagerFactory entityManagerFactory() {
LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
factory.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
factory.setPackagesToScan("foo.bar.web.domain");
factory.setDataSource(dataSource());
factory.setJpaPropertyMap(new HashMap<String, Object>() {{
put("hibernate.dialect", dialect);
put("hibernate.hbm2ddl.auto", hbm2ddl);
}});
factory.afterPropertiesSet();
return factory.getObject();
}
@Bean
public PlatformTransactionManager transactionManager() {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(entityManagerFactory());
return transactionManager;
}
}
Meine REST-Endpunkte mit SpringMVC mit folgenden Konfiguration implementiert:
@Configuration
@EnableWebMvc
@ComponentScan("foo.bar.web.controller")
public class MvcConfig extends WebMvcConfigurerAdapter {
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
@Bean
public MultipartResolver multipartResolver() {
return new CommonsMultipartResolver();
}
}
Web initializer:
public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[]{
ApplicationConfig.class,
RepositoryConfig.class
};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[]{MvcConfig.class};
}
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
}
Das Problem ist, dass ich Spring-Boo nicht verwenden möchte t automatische Konfiguration, weil ich meine vorhandenen Konfigurationsklassen mit minimalen Änderungen wiederverwenden möchte, aber ich kann den richtigen Weg dafür nicht finden. Ich habe versucht, Frühlings-Boot-Anwendungsklasse mit @SrpingBootApplication
kommentierte zu implementieren, aber ich bin mir nicht 100% sicher, dass meine Config-Klassen verwendet werden, da in diesem Fall ich java.lang.ClassCastException: org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean$$EnhancerBySpringCGLIB$$ba21071f cannot be cast to javax.persistence.EntityManagerFactory
bekommen.
Auch ich habe versucht, @EnableAutoConfiguration Annotation aus der Anwendungsklasse wegwerfen und TomcatEmbeddedServletContainerFactory
Bean zu meinem Kontext manuell hinzufügen, aber in diesem Fall Embedded Tomcat ist nicht richtig konfiguriert.
Es whould toll, wenn mir jemand einen Tipp geben kann, wie mein Problem zu lösen. Ich glaube, dass ich nur meinen WebInitizer durch Spring-Boot Config ersetzen muss.
Ich würde vorschlagen, die Auto-Config-Funktionen zu verwenden, so dass Sie grundsätzlich die meisten Ihrer Konfiguration Graben oder in die 'application.properties'. Und der beste wartbare Code ist Code nicht geschrieben. –
ich mit Ihnen, dass die automatische Konfiguration eine gute Eigenschaft völlig einverstanden ist, aber das ist mein pädagogisches Projekt und ich denke, dass eine manuelle Konfiguration mehr nützlich für das Verständnis, wie all diese Funktionen funktioniert und wie sie im Zusammenhang mit „traditionellen SpringMVC“ – Alex
Also im Grunde ist man Ich möchte Spring Boot nicht benutzen oder zumindest hart arbeiten, um so wenig wie möglich davon zu verwenden. Aber wenn Sie wirklich Ihren 'WebInitializer' ablegen müssen und ersetzen Sie ihn stattdessen durch einen, der die' SpringBootServletInitializer' Klasse erweitert. –