3

通过Docker启动DB2,并在Spring Boot整合DB2

 2 years ago
source link: https://www.pkslow.com/archives/db2
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

DB2是IBM的一款优秀的关系型数据库,简单学习一下。

2 Docker安装DB2

为了快速启动,直接使用Docker来安装DB2。先下载镜像如下:

docker pull ibmcom/db2:11.5.0.0

启动数据库如下:

docker run -itd \
  --name mydb2 \
	--privileged=true \
	-p 50000:50000 \
	-e LICENSE=accept \
	-e DB2INST1_PASSWORD=pkslow \
	-e DBNAME=testdb \
	ibmcom/db2:11.5.0.0

这样获得的数据库,具体信息如下:

连接URL:jdbc:db2://localhost:50000/testdb

用户名:db2inst1

密码:pkslow

在IDEA上连接如下:

默认的Schema为DB2INST1,测试SQL如下:

CREATE TABLE EMPLOYEE_SALARY
(DEPTNO   CHAR(3)      NOT NULL,
 DEPTNAME VARCHAR(36)  NOT NULL,
 EMPNO    CHAR(6)      NOT NULL,
 SALARY   DECIMAL(9,2) NOT NULL WITH DEFAULT);

插入数据:

INSERT INTO EMPLOYEE_SALARY (DEPTNO, DEPTNAME, EMPNO, SALARY) VALUES ('001', 'IT', '001322', 80000.00);
INSERT INTO EMPLOYEE_SALARY (DEPTNO, DEPTNAME, EMPNO, SALARY) VALUES ('001', 'IT', '001323', 20000.00);
INSERT INTO EMPLOYEE_SALARY (DEPTNO, DEPTNAME, EMPNO, SALARY) VALUES ('002', 'Architecture', '001324', 3220.00);
INSERT INTO EMPLOYEE_SALARY (DEPTNO, DEPTNAME, EMPNO, SALARY) VALUES ('002', 'Architecture', '001325', 8000.00);
INSERT INTO EMPLOYEE_SALARY (DEPTNO, DEPTNAME, EMPNO, SALARY) VALUES ('003', 'Front Office', '001326', 13320.00);
INSERT INTO EMPLOYEE_SALARY (DEPTNO, DEPTNAME, EMPNO, SALARY) VALUES ('001', 'IT', '001327', 5433.00);
SELECT * FROM DB2INST1.EMPLOYEE_SALARY;

Spring Boot整合DB2

添加相关依赖:

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
  </dependency>
  <dependency>
    <groupId>com.ibm.db2</groupId>
    <artifactId>jcc</artifactId>
    <version>11.5.0.0</version>
  </dependency>
</dependencies>

配置相关属性:

server.port=8082
spring.datasource.url=jdbc:db2://localhost:50000/testdb
spring.datasource.username=db2inst1
spring.datasource.password=pkslow
spring.jpa.generate-ddl=true

创建Entity:

package com.pkslow.springboot.jpa.db2.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "EMPLOYEE", schema = "DB2INST1")
public class Employee {
    @Id
    private Long id;
    private String name;
}

创建Repository类用于操作数据库:

public interface EmployeeRepository extends CrudRepository<Employee, Long> {
}

最后,写个方法测试一下:

@Configuration
@Slf4j
public class TestConfig {
    @Autowired
    private EmployeeRepository repository;

    @PostConstruct
    public void init() {
        Employee employee1 = new Employee(1L, "Larry Deng");
        Employee employee2 = new Employee(2L, "LarryDpk");
        Employee employee3 = new Employee(3L, "Pkslow");

        repository.deleteAll();
        repository.save(employee1);
        repository.save(employee2);
        repository.save(employee3);

        List<Employee> employees = StreamSupport.stream(repository.findAll().spliterator(), false)
                .collect(Collectors.toList());

        employees.forEach(e -> log.info(e.toString()));

    }
}

启动后,日志打印正常如下:

2022-02-28 23:26:22.476  INFO 60847 --- [           main] c.pkslow.springboot.jpa.db2.TestConfig   : Employee(id=1, name=Larry Deng)
2022-02-28 23:26:22.476  INFO 60847 --- [           main] c.pkslow.springboot.jpa.db2.TestConfig   : Employee(id=2, name=LarryDpk)
2022-02-28 23:26:22.476  INFO 60847 --- [           main] c.pkslow.springboot.jpa.db2.TestConfig   : Employee(id=3, name=Pkslow)

表数据如下:

代码请看GitHub: https://github.com/LarryDpk/pkslow-samples


References:

Docker Image

Statements Insert


Code for all: GitHub

欢迎关注微信公众号<南瓜慢说>,将持续为你更新...

Recommendations:
Cloud Native
Terraform
Container: Docker/Kubernetes
Spring Boot / Spring Cloud
Https
如何制定切实可行的计划并好好执行


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK