springboot引入其他項目jar包並實現對數據庫的操作


概述

A作為被引用的項目,目錄結構如下:

可以看到A目錄中只有基礎的service類以及mybatis操作數據庫的相關文件,service類中包含查詢數據庫的方法。

Tips: 項目A也可以是一個包含啟動類和配置文件的Springboot項目,一般情況下只會將公共的方法和類提取打包成公共jar供其他項目引用,而且這里啟動類的配置對后續引用也會造成影響,不利於排查。所以不推薦使用,盡量刪除在被引用的項目無用的配置文件和test文件,在主項目中進行必要的配置。

A項目作為公共項目打成jar供其他項目引用,注意被引入的項目不能使用默認的maven-plugin打包,否則引入此jar包的項目編譯時會報找不到程序包的錯誤

需要替換成以下配置:

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
				</configuration>
			</plugin>
		</plugins>

	</build>

配置完成后使用maven工具進行打包

成功之后可以看到本地maven倉庫中會出現上圖左邊標記出的jar,其他項目引用時,只需要在pom文件中使用上面的坐標引入依賴。

C項目引用A項目,目錄結構如下:

項目C作為主程序,需要有啟動類和配置文件,下面詳細說明一下啟動類的配置。

C項目本身只需要配置掃描當前項目的dao接口。因為@SpirngBootApplication默認包含了@ComponentScan注解並且處於其他類文件的根目錄,所以可以自動掃描到同級下面的所有@Service、@Controller類。

如果要掃描到A項目的類和接口就要添加A的目錄,寫法如下:

@MapperScan同時掃描A的dao接口和C項目的dao接口

@ComponentScan同時注冊A和C項目下需要被使用的類

這里如果MapperScan只掃描了C項目,那調用A的dao接口中的方法時,會初始化失敗項目無法啟動,

如果ComponentScan只掃描了A項目,那么訪問C項目的Controller會報404錯誤。

Tips:如果被引入的jar和主項目兩個項目的文件路徑全都一致的話,就不需要額外再配置掃描被引入的項目的目錄。

配置文件application.yml:

server:
  port: 8082
spring:
    datasource:
        driver-class-name: com.mysql.jdbc.Driver
        url: jdbc:mysql://**.**.**.***:3306/database?usessl = false&useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true
        username: username
        password: password
        type: com.zaxxer.hikari.HikariDataSource
        hikari:
           minimum-idle: 5
           maximum-pool-size: 15
           auto-commit: true
           idle-timeout: 30000
           pool-name: DatebookHikariCP
           max-lifetime: 1800000
           connection-timeout: 30000
           connection-test-query: SELECT 1

mybatis:
  configuration:
    mapUnderscoreToCamelCase: true
    call-setters-on-nulls: true
#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  mapper-locations: classpath*:mapper/*.xml

這里對服務的端口、數據庫連接、mybatis進行了配置。

注意:如果引入的其它的jar並且要使用它對應的mapper/*.xml文件時,要修改mapper-locations配置,使用通配符掃描所有calsspath對應目錄下的mapper文件

mapper-locations: classpath*:mapper/*.xml

測試:CccController.java

/**
 * @ClassName CController
 * @Description 測試調用其他jar中的方法
 * @Author Sue
 * @Create 2020/1/15 9:39
 **/
@RestController
@RequestMapping("/ccc")
public class CcController {

    @Autowired
    private CcService ccService;
    @Autowired
    private AbcService abcService;
    @Autowired
    private AbcMapper abcMapper;

    @GetMapping("/test01")
    public Map<String, Object> test01() {
        Map<String, Object> res = new HashMap<>();
        res.put("code", 200);
        //C項目service方法
        res.put("c_service", ccService.queryOne());
        //A項目的dao和service中的方法
        res.put("abc_mapper", abcMapper.queryOne());
        res.put("abc_service", abcService.queryOne());
        return res;
    }
}

我們在C項目的Controller中調用了C項目的查詢數據的方法和A項目查詢數據庫的方法,訪問接口成功返回數據,說明我們成功的在C項目中引用A項目並調用了其操作數據庫的方法。

{"code":200,"c_service":9419,"abc_service":9419,"abc_mapper":9419}

 

EOF


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM