如何使用休眠模式设置H2服务器模式?

时间:2020-10-21 03:26:26

标签: java hibernate h2

我有一个maven项目需要一个内存数据库来存储数据过滤后的数据集,因为它只是一个ETL项目,所以它不使用spring / spring boot框架,所以请使用hibernate来构建嵌入式H2。 一切正常,我可以对H2进行CRUD,但是我不知道是否要使用远程spring boot项目连接到此H2 DB,我应该设置什么?

这是我在maven项目中的文件: pom.xml

        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>1.4.200</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.4.22.Final</version>
        </dependency>

hibernate.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <!-- JDBC Database connection settings -->
        <property name="connection.driver_class">org.h2.Driver</property>
        <property name="connection.url">jdbc:h2:mem:test;DB_CLOSE_DELAY=-1</property>
        <property name="connection.username">sa</property>
        <property name="connection.password"></property>
        <!-- JDBC connection pool settings ... using built-in test pool -->
        <property name="connection.pool_size">1</property>
        <property name="jdbc.fetch_size">10000</property>
        <property name="jdbc.batch_size">10000</property>
        <!-- Select our SQL dialect -->
        <property name="dialect">org.hibernate.dialect.H2Dialect</property>
        <!-- Echo the SQL to stdout -->
        <property name="show_sql">true</property>
        <!-- Set the current session context -->
        <property name="current_session_context_class">thread</property>
        <!-- Drop and re-create the database schema on startup -->
        <property name="hbm2ddl.auto">create-drop</property>
        <!-- dbcp connection pool configuration -->
        <property name="hibernate.dbcp.initialSize">5</property>
        <property name="hibernate.dbcp.maxTotal">20</property>
        <property name="hibernate.dbcp.maxIdle">10</property>
        <property name="hibernate.dbcp.minIdle">5</property>
        <property name="hibernate.dbcp.maxWaitMillis">-1</property>
        <mapping class="cic.cs.unb.ca.hibernate.entity.CICFlowMeterH2" />
    </session-factory>
</hibernate-configuration>

HibernateUtil.java

import org.h2.tools.Server;
import org.hibernate.SessionFactory;
import org.hibernate.boot.Metadata;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;

public class HibernateUtil {
    private static StandardServiceRegistry registry;
    private static SessionFactory sessionFactory;

    public static SessionFactory getSessionFactory() {
        if (sessionFactory == null) {
            try {
                Server webServer = Server.createWebServer("-web","-webAllowOthers","-webPort","8082").start();
                Server server = Server.createTcpServer("-tcp","-tcpAllowOthers","-tcpPort","9092").start();
                // Create registry
                registry = new StandardServiceRegistryBuilder().configure().build();

                // Create MetadataSources
                MetadataSources sources = new MetadataSources(registry);

                // Create Metadata
                Metadata metadata = sources.getMetadataBuilder().build();

                // Create SessionFactory
                sessionFactory = metadata.getSessionFactoryBuilder().build();

            } catch (Exception e) {
                e.printStackTrace();
                if (registry != null) {
                    StandardServiceRegistryBuilder.destroy(registry);
                }
            }
        }
        return sessionFactory;
    }

    public static void shutdown() {
        if (registry != null) {
            StandardServiceRegistryBuilder.destroy(registry);
        }
    }
}
在春季启动项目中

(我已经运行db2.datasource.url=jdbc:h2:mem:test,并且工作正常,所以我只粘贴属性代码): application.properties

db2.datasource.driverClassName=org.h2.Driver
db2.datasource.url=jdbc:h2:tcp://10.250.31.42:9092/mem:test
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
db2.datasource.username=sa
db2.datasource.password=

有人可以帮助我解决这个问题吗? 谢谢 加濑

0 个答案:

没有答案