首先说一点,规则引擎里,典型的, 是不访问数据库的.青理解好这个概念和他的原因
这里只是在上个文章的基础上验证一个技术可行性而已.
上代码
这是个maven项目
package zzz;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class Test{
public static String url = "jdbc:mysql://xxxxx/mxxxtest?useSSL=false&useUnicode=yes&characterEncoding=utf8";
public static String user = "xx";//用户名
public static String passssword = "xxssx";//密码
public static Driver driver = null;
public static void init() {
try {
driver = new com.mysql.jdbc.Driver();
//设置用户名和密码
Properties props = new Properties();
props.setProperty("user", user);
props.setProperty("pas34sword", pass4word);
Connection conn = driver.connect(url, props);
String queyrSql =
"select providerId from xxx where id = '2' ";
Statement stmt = conn.createStatement();//获取statement
System.out.println(conn.isClosed() );
ResultSet rs = stmt.executeQuery(queyrSql);
while (rs.next()) {
String szData = rs.getString(1);
System.out.println(szData );
}
rs.close();
stmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void main(String[] s) {
System.out.println("1111111");
t2(1);
}
public static String t1() {
System.out.println("222");
return "222";
}
public static String t2(int c) {
System.out.println("333333");
init();
return "222"+c;
}
}
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>yyy</groupId>
<artifactId>forDMN2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.48</version>
</dependency>
</dependencies>
</project>
前者Test.java 后者pom.xml
为什么用老的mysql驱动,因为8.0之后都依赖了com.google.protobuf的protobuf-java,which跟drools内部某个依赖冲突了,导致处理postman发送的json请求时,解析json报错. 看了下本地maven库,只有5.几的就用了
然后就跟上个文章类似了, install, upload jar, restart server. drools的后台就可以打印出数据库里拿到的值了.
当然有很多可优化的地方. 可以把static语句块作为构造函数. 放一个连接池进去. 之类的
下一步考察是否可以得到一个对象.这样就真的完全无缝了就.
虽然按第一句话来说,这属于邪魔外道
09/19更新
查询得到结构完全ok .基本上可以为所欲为了
09/23更新
jar冲突的问题解决了.原因是发送的报文里有一个结构的属性名是"Type" ,报错说是跟spring-core里的某个类同名了,按spring-core来解析这个字段报了错,实际这个字段只是个dmn里定义的跟spring没关系,后来报文里改了下属性名就访问成功了. 也就是说解析json确实有名字的问题. 彻底的解决是dmn里的变量名字必须按规范来,首字母消息驼峰命名 不许有空格, 对象名也是这样, 结构名暂时看来不会放到报文里(报文里是结构对应的对象名)就按java类名的命名规范.
这样mysql 8.x的驱动也可以用了