[SPRING] Spring Boot / Thymeleaf / Hibernate : Java Annotation을 사용한 Sessionfactory Bean
SPRINGSpring Boot / Thymeleaf / Hibernate : Java Annotation을 사용한 Sessionfactory Bean
저는 Thymeleaf와 Hibernate를 사용하여 IntelliJ로 Spring Boot 웹 어플리케이션을 만들었습니다. 지금까지 모든 db 연결을 만들 수 있었고 정상적으로 작동합니다. 내가 본 것만 큼 Sessionfactory를 bean으로 갖고 db 액션을 수행하는 모든 서비스 클래스에서 autowire하는 좋은 방법이 될 것입니다.
SpringMvcConfiguration을 다음과 같은 구성 파일로 가지고 있습니다 :
package eu.barz.familykurse.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;
import java.util.Locale;
@Configuration
public class SpringMvcConfiguration extends WebMvcConfigurerAdapter{
@Bean
public LocaleResolver localeResolver(){
SessionLocaleResolver sessionLocaleResolver = new SessionLocaleResolver();
sessionLocaleResolver.setDefaultLocale(Locale.GERMAN);
return sessionLocaleResolver;
}
@Bean
LocaleChangeInterceptor localeChangeInterceptor(){
LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();
localeChangeInterceptor.setParamName("lang");
return localeChangeInterceptor;
}
@Override
public void addInterceptors(InterceptorRegistry interceptorRegistry){
interceptorRegistry.addInterceptor(localeChangeInterceptor());
}
}
질문 : 많이 시도했지만 SessionFactory에 대한 빈을 선언하는 솔루션을 찾을 수 없습니다.
어떤 힌트라도 도움이 될 것입니다. sessionfactory 및 datasource를 여기에 선언해야합니까? 그렇지 않으면 application.properties에 있거나 hibernate.cfg.xml에 있어야합니다. 현재는 다음과 같습니다.
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.url">jdbc:mysql://localhost:3306/family_kurse</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.username">username</property>
<property name="connection.password">secret</property>
<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
<property name="hibernate.current_session_context_class">thread</property>
<property name="show_sql">true</property>
<mapping class="eu.barz.familykurse.domain.Leader"/>
<mapping class="eu.barz.familykurse.domain.Course"/>
<!-- DB schema will be updated if needed -->
<!-- <property name="hbm2ddl.auto">update</property> -->
</session-factory>
</hibernate-configuration>
건배 마이크
해결책:
해결법
-
==============================
1.스프링 부트를 사용하고 있으므로 데이터베이스 구성에 XML 구성을 사용해야합니다. Spring 부트를 Hibernate와 통합하려면 다음과 같이 LocalSessionFactoryBean, DataSource, HibernateTransactionManager 및 PersistenceExceptionTranslationPostProcessor Bean을 생성해야합니다.
스프링 부트를 사용하고 있으므로 데이터베이스 구성에 XML 구성을 사용해야합니다. Spring 부트를 Hibernate와 통합하려면 다음과 같이 LocalSessionFactoryBean, DataSource, HibernateTransactionManager 및 PersistenceExceptionTranslationPostProcessor Bean을 생성해야합니다.
@Configuration public class DatabaseConfig { @Bean public LocalSessionFactoryBean sessionFactory() { LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean(); sessionFactory.setDataSource(dataSource()); sessionFactory.setPackagesToScan("com.example.model"); sessionFactory.setHibernateProperties(hibernateProperties()); return sessionFactory; } @Bean public DataSource dataSource() { DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName("org.postgresql.Driver"); dataSource.setUrl("jdbc:postgresql://localhost:5432/testdb"); dataSource.setUsername("root"); dataSource.setPassword("root"); return dataSource; } @Bean @Autowired public HibernateTransactionManager transactionManager(SessionFactory sessionFactory) { HibernateTransactionManager txManager = new HibernateTransactionManager(); txManager.setSessionFactory(sessionFactory); return txManager; } @Bean public PersistenceExceptionTranslationPostProcessor exceptionTranslation() { return new PersistenceExceptionTranslationPostProcessor(); } Properties hibernateProperties() { Properties properties = new Properties(); properties.setProperty("hibernate.ddl-auto", "update"); properties.setProperty("hibernate.dialect", "org.hibernate.dialect.PostgreSQLDialect"); return properties; } }
위의 데이터베이스 구성에서 나는 postgreSQL 데이터베이스를 사용했습니다.
다음과 같이 SessionFactory autowire SessionFactory 인터페이스의 인스턴스를 가져 오려면 :
@Autowired SessionFactory sessionFactory;
-
==============================
2.나는이 예를 여기서 취했다.
나는이 예를 여기서 취했다.
@Bean public LocalSessionFactoryBean sessionFactory() { LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean(); sessionFactory.setDataSource(restDataSource()); sessionFactory.setPackagesToScan( new String[] { "org.baeldung.spring.persistence.model" }); sessionFactory.setHibernateProperties(hibernateProperties()); return sessionFactory; } @Bean public DataSource restDataSource() { BasicDataSource dataSource = new BasicDataSource(); dataSource.setDriverClassName(env.getProperty("jdbc.driverClassName")); dataSource.setUrl(env.getProperty("jdbc.url")); dataSource.setUsername(env.getProperty("jdbc.user")); dataSource.setPassword(env.getProperty("jdbc.pass")); return dataSource; }
-
==============================
3.이거 해봤 니?
이거 해봤 니?
@Bean public org.springframework.orm.hibernate5.LocalSessionFactoryBean sessionFactory(){ org.springframework.orm.hibernate5.LocalSessionFactoryBean sessionFactory = new org.springframework.orm.hibernate5.LocalSessionFactoryBean(); sessionFactory.setDataSource(dataSource()); return sessionFactory; } @Bean public DataSource dataSource() { BasicDataSource dataSource = new BasicDataSource(); dataSource.setDriverClassName("jdbc.driverClassName"); dataSource.setUrl("jdbc.url"); dataSource.setUsername("jdbc.user"); dataSource.setPassword("jdbc.pass"); return dataSource; }
from https://stackoverflow.com/questions/45893879/spring-boot-thymeleaf-hibernate-sessionfactory-bean-with-java-annotations by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 통합 IMAP 어댑터를 사용하여 수동으로 "읽지 않음"으로 표시된 이메일을 가져 오는 방법은 무엇입니까? (0) | 2019.02.25 |
---|---|
[SPRING] jpa 쿼리에서 사용자 지정 함수를 사용하는 방법? (0) | 2019.02.25 |
[SPRING] Camel, Spring, OSGI : 중지 방법을 지정하는 방법이 있습니까? (0) | 2019.02.25 |
[SPRING] Spring 3.x - @Async 메서드는 작업 실행자에 의해 동시에 호출되지 않습니다. (0) | 2019.02.25 |
[SPRING] crudrepository findBy 메소드 튜플리스트의 서명 (0) | 2019.02.25 |