登录 | 注册
首页
方案案例
技术社区
资源中心
培训体系
服务合作
关于我们
SUNDB与Spring Boot联动指南
本文说明在使用Spring boot,maven与Hibernate的架构环境中联动SUNDB的方法
码筑匠心
专栏:数据架构师笔记 2024-07-24 4 0
分享到:

每个框架的联动和执行方法会根据环境而有所不同,框架级别的问题需用户自行解决。

  • 使用OS版本: CentOS Linux release 7.7.1908 (Core)

  • 开发Tool: Spring Tool Suite 4

  • 需具备适合spring版本的jdk环境。(需设置$JAVA_HOME环境变量)

1.Maven环境架构

1.1 安装maven

测试用户信息

  • user: spring

  • user_home: /home/spring/maven

安装maven软件包

$ wget http://apache.mirror.cdnetworks.com/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
$ tar -xvf apache-maven-3.6.3-bin.tar.gz
$ cd apache-maven-3.6.3
$ pwd
/home/spring/package/apache-maven-3.6.3

设置user profile

export M2_HOME=/home/spring/package/apache-maven-3.6.3
export PATH=$PATH:$M2_HOME/bin

查看maven安装

$ mvn -v
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /home/jinsil/dev/maven/apache-maven-3.6.3
Java version: 1.8.0_231, vendor: Oracle Corporation, runtime: /usr/local/java/jdk1.8.0_231/jre
Default locale: ko_KR, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-1062.9.1.el7.x86_64", arch: "amd64", family: "unix"

2.spring-boot环境架构

创建并执行https://start.spring.io/ 提供的示例来测试spring-boot。

2.1 创建示例

进入https://start.spring.io/并选择要使用的Maven Project, java, Spring boot的版本。在Dependencies中选择Spring Web。单击Generate,将弹出zip形式的示例文件。

image.png

将下载的示例移至Linux服务器并解压。检查操作后,通过Web浏览器等访问服务器的8080端口。

$ unzip demo.zip
Archive:  demo.zip
   creating: demo/
   .....
  inflating: demo/src/main/resources/application.properties
  inflating: demo/src/test/java/com/example/demo/DemoApplicationTests.java

$ cd demo
$ mvn spring-boot:run

[INFO] Scanning for projects...
[INFO] 
[INFO] -------------------------< com.example:demo >--------------------------
[INFO] Building demo 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] <<< spring-boot-maven-plugin:2.2.2.RELEASE:run (default-cli) < test-compile @ demo <<<
2019-12-26 10:15:11.339  INFO 21251 --- [             main]
com.example.demo.DemoApplication       : Started DemoApplication in 0.641 seconds (JVM running for 0.795)

如弹出以下界面,则操作成功。
image.png

2.2 用于SUNDB联动的环境设置

在联动之前,需具备SUNDB7.jar与hibernate-core-5.4.9.Final.jar文件。
SUNDB7.jar文件是在安装服务器软件包或客户端(Windows)时随附的用于SUNDB JDBC的库文件。

  • 服务器软件包: $SUNDB_HOME/lib/SUNDB7.jar

  • 客户端软件包(windows): C:\Program Files(x86)\SUNDB.x.x\SUNDB_home\lib\SUNDB7.jar

$ pwd
/home/spring/demo
$ mkdir lib
$ mv SUNDB7.jar lib
$ vi pom.xml

修改pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

SUNDBDialect.java位于以下路径中。

  • 服务器软件包: $SUNDB_HOME/app_dev/Hibernate/sunje/org/hibernate/dialect/SUNDBDialect.java

  • 客户端软件包(windows): C:\ProgramFiles(x86)\SUNDB.x.x\SUNDB_home\app_dev\Hibernate\sunje\org\hibernate\dialect\SUNDBDialect.java-> 编译完该文件后将生成的SUNDBDialect.class与SUNDBDialect$1.class文件添加到hibernate-core-5.4.9.Final.jar的org/hibernate/dialect中。
    image.png

将以下内容添加到Dependencies。

<dependencies>
   <dependency> 
        <groupId>SUNDB</groupId> 
        <artifactId>SUNDB_test</artifactId> 
        <version>3.3.0</version> 
        <scope>system</scope> 
        <systemPath>{项目路径}/lib/SUNDB7.jar</systemPath> 
    </dependency> 
    <dependency> 
        <groupId>org.hibernate</groupId> 
        <artifactId>hibernate-core</artifactId> 
        <scope>system</scope> 
        <systemPath>{项目路径}/lib/hibernate-core-5.4.9.Final.jar</systemPath> 
    </dependency>
</dependencies>

如果在添加后以调试模式运行,可以检查该库是否已加载。

$ mvn spring-boot:run –X
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /home/jinsil/dev/maven/apache-maven-3.6.3
Java version: 1.8.0_231, vendor: Oracle Corporation, runtime: /usr/local/java/jdk1.8.0_231/jre
Default locale: ko_KR, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-1062.9.1.el7.x86_64", arch: "amd64", family: "unix"
...
[DEBUG]   (f) compilePath = [... /home/spring/demo/lib/SUNDB7.jar]

3.SUNDB联动Sample

3.1 SUNDB sample结构

项目的结构如下。

|-- HELP.md 
|-- lib 
|   `-- SUNDB7.jar 
|   `-- hibernate-core-5.4.9.Final.jar 
|-- pom.xml 
|-- src 
|   `-- main 
|       |-- java 
|       |   `-- com 
|       |       `-- example 
|       |           `-- demo 
|       |               |-- DemoApplication.java 
|       |               |-- TestController.java 
|       |               |-- Board.java 
|       |               |-- BoardRepository.java 
|       |-- resources 
|       |   |-- application.properties 
|       |   |-- static 
|       |   `-- templates 
`-- target 
    |-- classes 
    |   |-- META-INF 
    |   |   |-- MANIFEST.MF 
    |   |   `-- maven 
    |   |       `-- com.example 
    |   |           `-- demo 
    |   |               |-- pom.properties 
    |   |               `-- pom.xml 
    |   |-- application.properties 
    |   `-- com 
    |       `-- example 
    |           `-- demo 
    |               |-- DemoApplication.class 
    |               |-- TestController.class 
    |               |-- Board.class 
    |               |-- BoardRepository.class 
    `-- test-classes

3.2 SUNDB sample列表

DemoApplication.java

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
 
@SpringBootApplication
public class DemoApplication {
 
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

TestController.java

package com.example.demo;

import java.util.List;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
 
@RestController
public class TestController {
    
    @Autowired
    private BoardRepository boardRepository;
    
    @RequestMapping("/select")
    public List<Board> getBoardList(){
        return boardRepository.findAll();
    }
}

Board.java

package com.example.demo;

import javax.persistence.Entity;
import javax.persistence.Id;
 
@Entity
public class Board {
    @Id
    private int bno;
    private String subject;
 
    public Board() {
        super();
    }

    public Board(int bno, String subject) {
        super();
        this.bno = bno;
        this.subject = subject;
    }

    public int getBno() {
        return bno;
    }
    public void setBno(int bno) {
        this.bno = bno;
    }
    public String getSubject() {
        return subject;
    }
    public void setSubject(String subject) {
        this.subject = subject;
    }
    @Override
    public String toString() {
        return "Board [bno=" + bno + ", subject=" + subject + "]";
    }
}

BoardRepository.java

package com.example.demo;
 
import org.springframework.data.jpa.repository.JpaRepository;
 
public interface BoardRepository extends JpaRepository<Board, Long>{
}

application.properties

spring.datasource.driverClassName=sunje.SUNDB.jdbc.SUNDBDriver
spring.datasource.url=jdbc:SUNDB://127.0.0.1:22581/test
spring.datasource.username=test
spring.datasource.password=test
spring.jpa.database-platform=org.hibernate.dialect.SUNDBDialect
 
spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.format_sql=true

3.3 驱动SUNDB sample

方法1. 在Eclipse中运行:右击项目-> Run As-> 运行Spring Boot App
方法2. 通过指令执行: 在该项目执行mvn spring-boot:run

$ mvn spring-boot:run

  .   ____          _            __ _ _
/\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
错误!超链接引用无效。  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot ::        (v2.2.2.RELEASE)

2020-01-03 17:40:03.664  INFO 24814 --- [           main] com.example.demo.DemoApplication         : Starting DemoApplication on localhost.localdomain with PID 24814 (/home/jinsil/study/SpringProject/startboot03/demo/target/classes started by jinsil in /home/jinsil/study/SpringProject/startboot03/demo)
2020-01-03 17:40:03.665  INFO 24814 --- [           main] com.example.demo.DemoApplication         : No active profile set, falling back to default profiles: default
2020-01-03 17:40:03.892  INFO 24814 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2020-01-03 17:40:03.944  INFO 24814 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 48ms. Found 1 JPA repository interfaces.
2020-01-03 17:40:04.051  INFO 24814 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2020-01-03 17:40:04.149  INFO 24814 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2020-01-03 17:40:04.153  INFO 24814 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2020-01-03 17:40:04.154  INFO 24814 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.29]
2020-01-03 17:40:04.185  INFO 24814 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2020-01-03 17:40:04.185  INFO 24814 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 502 ms
2020-01-03 17:40:04.242  INFO 24814 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2020-01-03 17:40:04.268  INFO 24814 --- [           main] com.zaxxer.hikari.pool.PoolBase          : HikariPool-1 - Driver does not support get/set network timeout for connections. (Unsupported feature: [getNetworkTimeout])
2020-01-03 17:40:04.281  INFO 24814 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2020-01-03 17:40:04.301  INFO 24814 --- [           main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
2020-01-03 17:40:04.326  INFO 24814 --- [           main] org.hibernate.Version                    : HHH000412: Hibernate Core {5.4.9.Final}
2020-01-03 17:40:04.371  INFO 24814 --- [           main] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.1.0.Final}
2020-01-03 17:40:04.414  INFO 24814 --- [           main] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.SUNDBDialect
2020-01-03 17:40:04.657  INFO 24814 --- [           main] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
2020-01-03 17:40:04.660  INFO 24814 --- [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2020-01-03 17:40:04.767  WARN 24814 --- [           main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
2020-01-03 17:40:04.821  INFO 24814 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2020-01-03 17:40:04.899  INFO 24814 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2020-01-03 17:40:04.900  INFO 24814 --- [           main] com.example.demo.DemoApplication         : Started DemoApplication in 1.368 seconds (JVM running for 1.528)

通过网络浏览器等访问该地址的/select时,将返回在控制台窗口中生成的查询语句。

2020-01-03 17:40:09.485  INFO 24814 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2020-01-03 17:40:09.485  INFO 24814 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2020-01-03 17:40:09.488  INFO 24814 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 3 ms

Hibernate: select board0_.bno as bno1_0_, board0_.subject as subject2_0_ from board board0_

4.创建JAR

如果要创建JAR文件来运行Web服务器,则需其他操作。 根据现有的配置,SUNDB7.jar文件和hibernate-core-5.4.9.Final.jar被视为外部库,因此在创建为JAR文件时不包含在内。可通过注册maven local repository创建JAR文件时
将其包括在内。

$ cd lib -- SUNDB7.jar与hibernate-core-5.4.9.Final.jar文件的路径
$ ls  
SUNDB7.jar hibernate-core-5.4.9.Final 
$ mvn install:install-file -Dfile=SUNDB7.jar -DgroupId=SUNDB -DartifactId=SUNDB_test -Dversion=3.3.0 -Dpackaging=jar 
$ mvn install:install-file -Dfile=hibernate-core-5.4.9.Final.jar -DgroupId=org.hibernate -DartifactId=hibernate-core -Dversion=5.4.9.Final -Dpackaging=jar 
$ cd .. – project目录
$ mvn package 
[INFO] 
[INFO] --------------------------< com.example:demo >-------------------------- 
[INFO] Building demo 0.0.1-SNAPSHOT 
[INFO] --------------------------------[ jar ]--------------------------------- 
[INFO] 
[INFO] --- maven-resources-plugin:3.1.0:resources (default-resources) @ demo --- 
[INFO] Using 'UTF-8' encoding to copy filtered resources. 
[INFO] Copying 1 resource 
[INFO] Copying 0 resource 
[INFO] 
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ demo --- 
[INFO] Nothing to compile - all classes are up to date 
[INFO] 
[INFO] --- maven-resources-plugin:3.1.0:testResources (default-testResources) @ demo --- 
[INFO] Using 'UTF-8' encoding to copy filtered resources. 
[INFO] skip non existing resourceDirectory /home/spring/project/window/src/test/resources 
[INFO] 
[INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ demo --- 
[INFO] No sources to compile 
[INFO] 
[INFO] --- maven-surefire-plugin:2.22.1:test (default-test) @ demo --- 
[INFO] 
…………
[INFO] --- maven-jar-plugin:3.1.2:jar (default-jar) @ demo --- 
[INFO] Building jar: /home/spring/project/window/target/demo-0.0.1-SNAPSHOT.jar 
[INFO] 
[INFO] --- spring-boot-maven-plugin:2.2.2.RELEASE:repackage (repackage) @ demo --- 
[INFO] Replacing main artifact with repackaged archive 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time:  3.846 s 
[INFO] Finished at: 2020-01-06T14:21:16+09:00 
[INFO] ------------------------------------------------------------------------

完成packaging后,该文件将生成于target目录。

$ ls target/*.jar
target/demo-0.0.1-SNAPSHOT.jar

可使用jar -tf指令来查看jar文件的内容。如通过grep等来查找SUNDB,则很容易查看
是否包含在内。

$ jar -tf demo-0.0.1-SNAPSHOT.jar
META-INF/
META-INF/MANIFEST.MF
...
BOOT-INF/lib/spring-core-5.2.2.RELEASE.jar
BOOT-INF/lib/spring-jcl-5.2.2.RELEASE.jar
BOOT-INF/lib/SUNDB_test-3.3.0.jar -- SUNDB7.jar 파일이 포함되어 있다.
BOOT-INF/lib/hibernate-core-5.4.9.Final.jar -- hibernate-core-5.4.9.Final.jar 파일이 포함되어 있다.
BOOT-INF/lib/mybatis-spring-boot-starter-2.2.2.jar
BOOT-INF/lib/mybatis-spring-boot-autoconfigure-2.2.2.jar
...复制

但是,与库一起创建时,还需修改pom.xml中的项目。如下删除scope和systemPath即可。

<dependency>
   <groupId>SUNDB</groupId>
   <artifactId>SUNDB_TEST</artifactId>
   <version>3.3.0</version>
</dependency>
<dependency>  
    <groupId>org.hibernate</groupId>  
    <artifactId>hibernate-core</artifactId>  
</dependency>


0
评论

登录后发表回复

暂无评论
专栏作者
码筑匠心

技术专家

  • 文章

    9
  • 阅读量

    53
  • 获赞

    7
数据库适配过程中的经验分享
专栏其它文章更多 》

SUNDB

常见问题集锦

SUNDB

免费试用

回复