10 DB操作-01 数据库配置

数据源配置

从本章开始介绍Quarkus的数据库操作,本章主要讲一下在Quarkus中如何配置数据库,单数据库多数据库或者多异构数据库配置等等。虽然上一个部分的Rest服务还没有讲完,还有一些不常用的框架没有写到,后面慢慢完善。

本章目标

  • 单数据源配置
  • 多数据源配置
  • 响应式数据源配置

1 基本配置

1.1 配置

Quarkus 支持两种数据源配置:

  • JDBC: JDBC数据源使用的连接池是 Agroal
  • Reactive : 使用的Vert.x的数据库驱动实现。

JDBC的配置如下:

quarkus.datasource.db-kind=postgresql
quarkus.datasource.username=<your username>
quarkus.datasource.password=<your password>

quarkus.datasource.jdbc.url=jdbc:postgresql://localhost:5432/hibernate_orm_test
quarkus.datasource.jdbc.max-size=16

Reactive 数据源的配置如下:

quarkus.datasource.db-kind=postgresql
quarkus.datasource.username=<your username>
quarkus.datasource.password=<your password>

quarkus.datasource.reactive.url=postgresql:///your_database
quarkus.datasource.reactive.max-size=20

两者在配置方面并没有太大的区别,只是在数据源的配置前面加上了reactive标识。

  • db-kind : 配置的是你要链接的数据库的名称,默认支持的DB类型如下:
DB2: db2
Derby: derby
H2: h2
MariaDB: mariadb
Microsoft SQL Server: mssql
MySQL: mysql
PostgreSQL: postgresql, pgsql or pg

如果想使用不在内置数据库类型中的数据库,只能使用JVM模式,需要配置db-kind=other,且需要指明Driver驱动。
对于内置数据库使用的Driver可以参考下图:
在这里插入图片描述
默认情况下不需要我们显示配置,但如果需要指定Driver可以加如下配置项:

quarkus.datasource.jdbc.driver=io.opentracing.contrib.jdbc.TracingDriver

更多配置项可以参考 https://quarkus.io/guides/datasource#jdbc-configuration

1.2 使用

加入依赖,这里我使用PG

<dependency>
     <groupId>io.quarkus</groupId>
     <artifactId>quarkus-jdbc-postgresql</artifactId>
 </dependency>

 <dependency>
     <groupId>io.quarkus</groupId>
     <artifactId>quarkus-resteasy-jackson</artifactId>
 </dependency>

 <dependency>
     <groupId>io.quarkus</groupId>
     <artifactId>quarkus-agroal</artifactId>
 </dependency>

基本使用: 只需要注入AgroalDatasource 使用即可。

@ApplicationScoped
public class DbOperationService {

    @Inject
    AgroalDataSource agroalDataSource;


    public String getById(Integer id){

       try {
           Connection connection = agroalDataSource.getConnection();

           var sql = "select * from t_user where id = ?";

           PreparedStatement statement = connection.prepareStatement(sql);

           statement.setInt(1, id);

           ResultSet resultSet = statement.executeQuery();

           if(resultSet.next()){
               var idd = resultSet.getInt(1);
               var name = resultSet.getString(2);
               return idd + ", " + name;
           }
       }catch (Exception e){
           e.printStackTrace();
       }

       return "nothing";
    }

}

就是使用原生JDBC模式,不常用。

1.3 响应式数据库的使用

加入依赖:

<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-reactive-pg-client</artifactId>
</dependency>
@ApplicationScoped
public class DbReactiveOperationService {

    @Inject
    @ReactiveDataSource("re")
    PgPool pgPool;


    public Uni<String> getById(Integer id){

        return pgPool.preparedQuery("select * from t_user where id = $1").execute(Tuple.of(id))
        .onItem()
        .transform(rows -> {
            var res = rows.iterator().next();
            var idd = res.getInteger("id");
            var name = res.getString("name");
            return idd + ", " + name;
        }).onFailure()
                .recoverWithItem(e->{
                    e.printStackTrace();
                    return "ERROR";
                });
    }
}

1.4 多数据配置和使用

quarkus.datasource.db-kind=postgresql
quarkus.datasource.username=postgres
quarkus.datasource.password=postgres
quarkus.datasource.jdbc.url=jdbc:postgresql://192.168.199.125:5432/quarkus_demo
quarkus.datasource.jdbc.max-size=16

quarkus.datasource.pg.db-kind=postgresql
quarkus.datasource.pg.username=postgres
quarkus.datasource.pg.password=postgres
quarkus.datasource.pg.jdbc.url=jdbc:postgresql://192.168.199.125:5432/quarkus_demo
quarkus.datasource.pg.jdbc.max-size=16

quarkus.datasource.my.db-kind=postgresql
quarkus.datasource.my.username=postgres
quarkus.datasource.my.password=postgres
quarkus.datasource.my.jdbc.url=jdbc:postgresql://192.168.199.125:5432/quarkus_demo
quarkus.datasource.my.jdbc.max-size=16
 @Inject
 @DataSource("pg")
 AgroalDataSource agroalDataSource;

 @Inject
 @DataSource("my")
 AgroalDataSource mysql;

响应式数据源的配置类似但是在使用时使用的是@ReactiveDatasource 注解指定要使用的数据源。

2 总结

本节简单介绍了在Quarkus中如何配置多数据源,仅仅是一些配置,具体的使用方式会在后面的文章中慢慢讲到。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值