当前位置:网站首页>Vertx's responsive MySQL template
Vertx's responsive MySQL template
2022-07-03 07:25:00 【Sleeping Empire】
Introduce
Vertx Response type mysql client , be based on SQL Client Templates Template operation sql Script
1. maven Project dependence
<dependencies>
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-web</artifactId>
</dependency>
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-config-yaml</artifactId>
</dependency>
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-mysql-client</artifactId>
</dependency>
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-sql-client-templates</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.27</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>com.lance.common</groupId>
<artifactId>vertx-common-core</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
2.YAML File configuration
server:
port: 8000
mysql:
host: 127.0.0.1
port: 3306
database: v_example
username: root
password: li123456
charset: utf8
collation: utf8_general_ci
maxSize: 30
reconnectAttempts: 3
reconnectInterval: 1000
poolName: v-pool
3. Start loading profile , And into the config In the middle
public class TemplateApplication {
public static void main(String[] args) {
Vertx vertx = Vertx.vertx();
ConfigRetriever retriever = readYaml(vertx);
retriever.getConfig(json -> {
try {
JsonObject object = json.result();
DbHelper dbHelper = new DbHelper(object.getJsonObject("mysql"), vertx);
dbHelper.afterPropertiesSet();
DeploymentOptions options = new DeploymentOptions().setConfig(object);
vertx.deployVerticle(MainApp.class.getName(), options);
} catch (Exception ex) {
log.error("===> Vertx start fail: ", ex);
}
});
}
/**
* read yaml config
*
* @param vertx vertx
* @return ConfigRetriever
*/
private static ConfigRetriever readYaml(Vertx vertx) {
ConfigStoreOptions store = new ConfigStoreOptions()
.setType("file")
.setFormat("yaml")
.setOptional(true)
.setConfig(new JsonObject().put("path", "application.yaml"));
return ConfigRetriever.create(vertx, new ConfigRetrieverOptions().addStore(store));
}
}
4.Mysql Connection pool configuration
public class DbHelper {
private final JsonObject object;
private final Vertx vertx;
private static MySQLPool mySqlPool;
/**
* Get the client
*
* @return MySQLPool
*/
public static MySQLPool client() {
return mySqlPool;
}
/**
* initialization mysql Connect
*/
public void afterPropertiesSet() {
ConfigProperties.MysqlProperties properties = object.mapTo(ConfigProperties.MysqlProperties.class);
MySQLConnectOptions connectOptions = new MySQLConnectOptions()
.setPort(properties.getPort())
.setHost(properties.getHost())
.setDatabase(properties.getDatabase())
.setUser(properties.getUsername())
.setPassword(properties.getPassword())
.setReconnectAttempts(properties.getReconnectAttempts())
.setReconnectInterval(properties.getReconnectInterval())
.setCharset(properties.getCharset())
.setCollation(properties.getCollation());
PoolOptions poolOptions = new PoolOptions()
.setMaxSize(properties.getMaxSize())
.setName(properties.getPoolName())
.setShared(true);
mySqlPool = MySQLPool.pool(vertx, connectOptions, poolOptions);
}
}
5. Connection pool database sql perform
public class UserService {
/**
* find list
*/
public void list(RoutingContext ctx) {
MySQLPool pool = DbHelper.client();
SqlTemplate.forQuery(pool, select(null))
.mapTo(UserInfo.class)
.execute(null)
.onSuccess(rs -> {
List<UserInfo> list = new ArrayList<>();
rs.forEach(list::add);
ctx.json(R.data(list));
}).onFailure(e -> {
log.warn("Failure: ", e);
ctx.json(R.fail("list fail"));
});
}
/**
* find one
*/
public void detail(RoutingContext ctx) {
MySQLPool pool = DbHelper.client();
SqlTemplate.forQuery(pool, select("where user_id=#{userId}"))
.mapTo(UserInfo.class)
.execute(Collections.singletonMap("userId", ctx.pathParam("userId")))
.onSuccess(result -> {
if (result.size() > 0) {
ctx.json(R.data(result.iterator().next()));
return;
}
ctx.json(R.data(null));
}).onFailure(e -> {
log.warn("Failure: ", e);
ctx.json(R.fail("detail fail"));
});
}
/**
* add user info
*/
public void add(RoutingContext ctx) {
UserInfo user = ctx.getBodyAsJson().mapTo(UserInfo.class);
if (user == null) {
ctx.json(R.fail(" The parameter is empty. "));
return;
}
MySQLPool pool = DbHelper.client();
SqlTemplate.forUpdate(pool, "insert into t_user(username,password,age,status,create_time,update_time)value(#{username},#{password},#{age},1,now(),now())")
.mapFrom(UserInfo.class)
.execute(user)
.onSuccess(v -> ctx.json(R.success("save success")))
.onFailure(e -> {
log.warn("Failure: ", e);
ctx.json(R.fail("save fail"));
});
}
/**
* update user
*/
public void update(RoutingContext ctx) {
log.info("===>{}", ctx.getBodyAsJson());
UserInfo user = ctx.getBodyAsJson().mapTo(UserInfo.class);
if (user == null) {
ctx.json(R.fail(" The parameter is empty. "));
return;
}
MySQLPool pool = DbHelper.client();
SqlTemplate.forUpdate(pool, "update t_user set username=#{username},password=#{password},age=#{age},status=#{status},update_time=now() where user_id=#{userId}")
.mapFrom(UserInfo.class)
.execute(user)
.onSuccess(v -> ctx.json(R.success("update success")))
.onFailure(e -> {
log.warn("Failure: ", e);
ctx.json(R.fail("update fail"));
});
}
/**
* delete one
*/
public void delete(RoutingContext ctx) {
MySQLPool pool = DbHelper.client();
SqlTemplate.forUpdate(pool, "delete From t_user where user_id=#{userId}")
.execute(Collections.singletonMap("userId", ctx.pathParam("userId")))
.onSuccess(v -> ctx.json(R.success("delete success")))
.onFailure(e -> {
log.warn("Failure: ", e);
ctx.json(R.fail("delete fail"));
});
}
private String select(String where) {
String select = "SELECT user_id as userId, username,password,age,status,create_time as createTime,update_time as updateTime from t_user";
if (StringUtils.isNotBlank(where)) {
select += " " + where;
}
return select;
}
}
6. Full address of the project
边栏推荐
- IO stream system and FileReader, filewriter
- Distributed ID
- Specified interval inversion in the linked list
- Advanced API (UDP connection & map set & collection set)
- LeetCode
- Deep learning parameter initialization (I) Xavier initialization with code
- [solved] sqlexception: invalid value for getint() - 'Tian Peng‘
- File operation serialization recursive copy
- docker建立mysql:5.7版本指定路径挂载不上。
- C代码生产YUV420 planar格式文件
猜你喜欢
Margin left: -100% understanding in the Grail layout
How long is the fastest time you can develop data API? One minute is enough for me
C code production YUV420 planar format file
Store WordPress media content on 4everland to complete decentralized storage
不出网上线CS的各种姿势
Understanding of class
Basic components and intermediate components
《指環王:力量之戒》新劇照 力量之戒鑄造者亮相
SecureCRT取消Session记录的密码
IPv4 address
随机推荐
Take you through the whole process and comprehensively understand the software accidents that belong to testing
Qtip2 solves the problem of too many texts
[solved] sqlexception: invalid value for getint() - 'Tian Peng‘
【CMake】CMake链接SQLite库
Advanced API (batch image Download & socket dialog)
Chrome 98 Private Network Access problem w/ disabled web security: Request had no target IP address
c语言指针的概念
Topic | synchronous asynchronous
Advanced API (multithreading)
SecureCRT password to cancel session recording
691. 立方体IV
The education of a value investor
【已解决】win10找不到本地组策略编辑器解决方法
Advanced API (serialization & deserialization)
Operation and maintenance technical support personnel have hardware maintenance experience in Hong Kong
New stills of Lord of the rings: the ring of strength: the caster of the ring of strength appears
Introduction of buffer flow
4279. 笛卡尔树
JUC forkjoinpool branch merge framework - work theft
The difference between typescript let and VaR