如何在 Hibernate 中使用 application.properties 设置配置?

How to set configuration using application.properties in Hibernate?

我是 Spring 引导开发的新手。

我做了什么?

我测试了示例 MySQL 与 Spring 启动的集成并测试它工作正常。

我在尝试什么?

我正尝试在现有项目中使用 Hibernate API。所以我创建了一个用于创建 Hibernate sessionFactory 的实用程序 class。

我的代码:

public static void initSessionFactory() {
    System.out.print("initSessionFactory");
    if (sessionFactory == null) {
        try {
            Configuration configuration = new Configuration();

             //***** I don't want configuration here. ******
            // Hibernate settings equivalent to hibernate.cfg.xml's properties
            //Properties settings = new Properties();
            // settings.put(Environment.DRIVER, "com.mysql.cj.jdbc.Driver");
            // settings.put(Environment.URL, "jdbc:mysql://localhost:3306/hibernate_db?useSSL=false");
            // settings.put(Environment.USER, "root");
            // settings.put(Environment.PASS, "root");
            // settings.put(Environment.DIALECT, "org.hibernate.dialect.MySQL5Dialect");
            // settings.put(Environment.CURRENT_SESSION_CONTEXT_CLASS, "thread");
            // settings.put(Environment.HBM2DDL_AUTO, "create-drop");
            // settings.put(Environment.SHOW_SQL, "true");
            //  configuration.setProperties(settings);

            //configuration.addAnnotatedClass(Student.class);

            ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
                    .applySettings(configuration.getProperties()).build();

            sessionFactory = configuration.buildSessionFactory(serviceRegistry);
            session = sessionFactory.openSession();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

我的application.properties:(没有Hibernate也能正常工作)

spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:mysql://localhost:3306/tcc
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect
spring.jpa.show-sql=true

我的问题:

我已经在 application.properties 中配置了 jdbc 环境和其他配置。它工作正常。所以我不想在我的 Java 代码中重复相同的配置。所以我评论了这个配置。

但如果没有 Java 配置,它会抛出“应用程序必须提供 JDBC 连接”错误。

我的问题:

如何从 application.properties 为 Hibernate 设置配置?

当您在 app.properties 中设置以下属性时,Spring 启动将在应用程序启动时准备好您的数据库连接。

spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:mysql://${MYSQL_HOST:localhost}:3306/db_example
spring.datasource.username=springuser
spring.datasource.password=ThePassword
spring.datasource.driver-class-name =com.mysql.jdbc.Driver

即使您不想手动管理数据库连接,也无需创建 SessionFactory , ServiceRegistery 等。

这link也更详细地解释了这些步骤。您将看到没有任何自定义 bean、工厂或注册器来建立数据库连接。请看。 https://spring.io/guides/gs/accessing-data-mysql/