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
是设置管理员账号为admin
PGADMIN_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
的特殊化操作再去学习也是完全可以的。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。