首页 问答 java服务封装jar包依赖
问题详情

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

发表评论
暂无评论

还没有评论呢,快来抢沙发~

点击联系客服

在线时间:8:00-16:00

客服QQ

70068002

客服电话

400-888-8888

客服邮箱

70068002@qq.com

扫描二维码

关注微信公众号

扫描二维码

手机访问本站