PostgreSQL Docker部署+SpringBoot集成方式
作者:爱写BUG的老冉
背景
最近公司有新项目需要使用 PostgreSQL ,于是简单学习了一下,并记录一下过程。
安装PostgreSQL
拉取镜像
docker pull mdillon/postgis
启动容器
docker run --name postgis -e POSTGRES_PASSWORD=postgis -p 5432:5432 -d mdillon/postgis:latest
注:其中 POSTGRES_PASSWORD=postgis 设置了密码为 postgis
安装pgadmin4
pgadmin4可以理解为在线操作PostgreSQL的可视化网站,(也可以不安装这个,用DBeaver 或者 Navicat进行连接使用。
拉取镜像
docker pull dpage/pgadmin4
启动容器
docker run -d -p 5050:80 --name pgadmin4 -e PGADMIN_DEFAULT_EMAIL=admin -e PGADMIN_DEFAULT_PASSWORD=admin dpage/pgadmin4
PGADMIN_DEFAULT_EMAIL=admin是设置管理员账号为adminPGADMIN_DEFAULT_PASSWORD=admin是设置密码为admin
防火墙放行端口
firewall-cmd --zone=public --add-port=5050/tcp --permanent
由于部分服务器的设置,防火墙对部分端口没有放开,这时外部通过端口访问的时候可能请求不到,所以需要放行端口。
页面操作
前面操作执行成功后,通过url:http://{ip}:5050/login 进行页面访问,可进入下面这个页面,输入账号密码,语言选择中文,点击登录即可。

进入页面后,选择添加服务器,然后输入我们数据库的相关信息即可添加成功


然后我们选择创建架构(其他地方也有翻译为模式),为后文测试做准备(作者这里创造的是名为test的架构)

然后在test下创建一张名为test1的表,该表只需要保护一个int类型的id字段即可

建表后任意添加一条数据

SpringBoot集成
作者这里使用的是各依赖版本如下:
SpringBoot: 2.3.7.RELEASEpostgresql: 42.2.23lombok: 1.18.26mybatis: 2.3.0mybatis-plus: 3.4.3
pom依赖
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<spring-boot.version>2.3.7.RELEASE</spring-boot.version>
</properties>
<dependencies>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.23</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<version>2.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.26</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3</version>
</dependency>
</dependencies>application.yml
server:
port: 9001
spring:
datasource:
driver-class-name: org.postgresql.Driver
username: postgres
password: postgis
url: jdbc:postgresql://{ip}:5432/postgres?currentSchema=test
mybatis:
mapper-locations: classpath:mapper/*.xml
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
注:对于jdbc:postgresql://{ip}:5432/postgres?currentSchema=test这里,如果不填 currentSchema=test则默认走postgres中public这个模式(也就是我们前文创建的架构),这里我们要走我们自己创建的test模式,所以这里需要把这个配置加上。
domain实体类
package com.ran.pgsql_code.domain;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName(value = "test1")
public class Test {
private Long id;
}注:这里的表名要和我们前文创建的表对应上。
mapper
package com.ran.pgsql_code.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ran.pgsql_code.domain.Test;
public interface TestMapper extends BaseMapper<Test> {
}注:需要去application添加注解,这里要和我们的mapper创建的路径保持一致
@MapperScan("com.ran.pgsql_code.mapper")代码调试
创建测试类,执行以下代码
package com.ran.pgsql_code;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ran.pgsql_code.mapper.TestMapper;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.core.JdbcTemplate;
import javax.annotation.Resource;
import java.util.List;
@Slf4j
@SpringBootTest
class Tests {
@Resource
private TestMapper testMapper;
@Test
void queryForMybatisPlus(){
QueryWrapper<com.ran.pgsql_code.domain.Test> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("id", 1L);
List<com.rlz.pgsql_code.domain.Test> result = testMapper.selectList(queryWrapper);
if (result == null){
return;
}
for (com.rlz.pgsql_code.domain.Test test : result){
System.out.println(test);
}
}
}执行能成功查到,集成成功

总结
由于PostgreSQL和MySQL的语法都是基于SQL来的,所以作者个人认为没必要重学一遍PostgreSQL的语法,基础的增删改查也可以通过mybatis来直接操作,等在实际应用中遇到了一些PostgreSQL的特殊化操作再去学习也是完全可以的。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
