我有一个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=
有人可以帮助我解决这个问题吗? 谢谢 加濑