使用Spring Boot配置Hibernate的问题,CommandLineRunner

时间:2015-11-13 16:33:20

标签: spring hibernate

我正在使用Spring Tool Suite创建一个使用Hibernate的Spring Boot应用程序。

这是我的application.properties文件:

spring.datasource.url=jdbc:mysql:someurl
spring.datasource.username=somename
spring.datasource.password=somepassword
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.jpa.hibernate.ddl-auto=create
spring.jpa.database-platform=org.hibernate.dialect.SQLServerDialect
spring.jpa.show-sql=true

我正在尝试运行以下CommandLineRunner:

@Bean
public CommandLineRunner demo(CustomerRepository repository) {
    return (args) -> {

        Configuration configuration = new Configuration().configure();

        ServiceRegistryBuilder registry = new ServiceRegistryBuilder();
        registry.applySettings(configuration.getProperties());
        ServiceRegistry serviceRegistry = registry.buildServiceRegistry();
        SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);

        Session session = sessionFactory.openSession();

        Transaction t = session.beginTransaction();

        Customer e1 = new Customer();
        //blah blah blah
        session.persist(e1);

        t.commit();

        session.close();


    };
}

我的问题是:

Configuration configuration = new Configuration().configure();

查找“hibernate.cfg.xml”,我的所有hibernate配置都在application.properties中

如何让Hibernate配置文件用application.properties中的东西初始化自己?

1 个答案:

答案 0 :(得分:1)

如果使用spring boot,配置会自动加载应用程序属性。只有在需要其他配置或以编程方式修改现有配置时才需要配置。

我想,你不需要它们中的任何一个,也就是说,你总是可以使用它而不是设置配置来获得sessionfactory:

@Autowired
private EntityManagerFactory entityManagerFactory;

@Bean
public SessionFactory getSessionFactory() {
    if (entityManagerFactory.unwrap(SessionFactory.class) == null) {
        throw new NullPointerException("Not a hibernate factory exception");
    }
    return entityManagerFactory.unwrap(SessionFactory.class);
}

通过这种方式,您的配置会自动加载,并且您可以获得sessionfactory。

希望这有帮助。