问题详情
1.我需要将一个现有java项目封装为公共jar包依赖,供多个不同项目依赖使用。
2.这个封装的jar包内需要进行数据库连接
3.jar包内连接的数据库和需要依赖此jar包的服务都需要连接同一个数据库
问题:怎样只在外层做数据库连接,封装的jar包和外层共用同一个数据库连接(因为jar包内用了mybatis,所以在编译的时候会检查分装的jar包本身是否有数据库连接配置,所以我尝试了只在外层做连接配置,jar包内没有配置会异常,目前是采用外层和依赖包各自做了数据库连接的配置,感觉有点多余)
或者能不能将url等配置全部放在外层服务,jar包引用外层的配置项进行数据库连接,不然每次即需要改外层的连接配置还需要改依赖包内的配置。
回答
1. 首先, 确保项目结构类似于以下形式:
/my-project
├── /my-core (包含您的 JAR 包代码)
├── /my-app (依赖 my-core 的应用)
2. 在 my-core中, 不要直接配置数据库连接; 提供一个方法来接受外部的数据库连接
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSession;
public class DatabaseManager {
private SqlSessionFactory sqlSessionFactory;
public DatabaseManager(SqlSessionFactory sqlSessionFactory) {
this.sqlSessionFactory = sqlSessionFactory;
}
public SqlSession getSession() {
return sqlSessionFactory.openSession();
}
}
3. 在jar包的服务类中使用DatabaseManager来获取数据库连接
public class MyService {
private DatabaseManager databaseManager;
public MyService(DatabaseManager databaseManager) {
this.databaseManager = databaseManager;
}
public void someDatabaseOperation() {
try (SqlSession session = databaseManager.getSession()) {
// 使用 MyBatis 进行数据库操作
}
}
}
4. 在外层应用中创建一个SqlSessionFactory并将其传递给DatabaseManager
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MainApp {
public static void main(String[] args) {
// 创建 SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 创建 DatabaseManager
DatabaseManager databaseManager = new DatabaseManager(sqlSessionFactory);
// 创建服务
MyService myService = new MyService(databaseManager);
// 调用服务方法
myService.someDatabaseOperation();
}
}
试试以上方法是否可行
回答你的问题时还发现该网站的回答功能没有做幂等校验
版权:言论仅代表个人观点,不代表官方立场。转载请注明出处:https://www.stntk.com/question/1154.html
还没有评论呢,快来抢沙发~