使⽤IDEA开发springboot多module模块项⽬的配置⽂件的共享读取问题
最近在改⼀个项⽬,给这个项⽬套springboot框架,打算把项⽬所有的功能模块要⽤到的配置⽂件和⼯具类放到⼀个独⽴的module⾥(以下简称framework),其他module读取使⽤(省去了重复编写的⿇烦),途中遇到很多问题,经过⼏个⼩时的琢磨,终于可以读取共享了。这⾥把⼏个关键点列出来,出错的都在这⼏个地⽅。
1.⾸先是springboot核⼼配置⽂件问题,我是⽤yml⽂件配置的,⽤properties也是⼀样的。
思路:把把公共module"framework"所需要的配置写在⾃⼰的module⾥,如图。
注意:springboot架构图
配置⽂件⼀定要以application-XX的形式命名,不然后续配置⽆法识别!
打勾的是⼀定要配的profiles: utils表⽰给这个配置⽂件起名为utils(⼀定要和⽂件名扩展名⼀样)。
思路:其他module的yml需要读取公共module的yml,那么需要在其他module的yml配置:
我这⾥只写了两个模块(framework和system),因为system这个模块是启动⼊⼝所以我直接命名application,然后再profiles属性⾥添加:include(或active): utils,就可以引⼊l⽂件的所有内容了(如果是2个有扩展名的yml配置⽂件之间读取的话⽤active会报错,只能⽤include),如果system模块有独⽴的配置也可以在l后⾯添加,提⾼扩展性。
2.包的命名问题
所有module的包都要以相同的包开始,然后再在⾥⾯建各⾃的包。这是强制性要求,这不仅涉及到不同module的依赖相互识别问题,也涉及到⽗module和⼦module的pom关系(见下图),也⽅便配置⽂件中配置包的扫描能够在不同module条件下扫描到所有module的包。
最上⾯那个是⽗module,下⾯两张分别是framework和system。
3.SpringBootApplication启动类问题
framework公共module的启动类需要删除,因为不需要在⼯具module⾥启动。⼀般都是在web层的module启动,我这⾥就把system当做web的module了。
注意:启动类⼀定要与起始包(com.likemoney)同级不然会启动错误!扫不到包
4.依赖问题
在system这个module的pom⾥需要导⼊公共module framework的依赖,否则将⽆法使⽤framework⾥的类。
mybatis的xml共享读取问题:
xml⽂件⼀般都是mybaits的mapper的xml,这⾥我们需要在framework⾥写⼀个配置数据源的config类,在这个类⾥⾯扫描l,如果这个没有配置好的话会出现autowired⽆法织⼊mapper接⼝的情况。
**
*啊⾥巴巴druid数据连接池配置
*
*@author gj
*@date2018/12/19
*/
@Configuration
@MapperScan(basePackages = DataSourceConfig.PACKAGES, sqlSessionFactoryRef ="dataSqlSessionFactory")
public class DataSourceConfig {
static final String PACKAGES ="com.likemoney.dao.mapper";
private static final String MAPPER_LOCAL ="classpath*:mybatis/mapper/*.xml";
@ConfigurationProperties("spring.datasource.druid")
@Bean(name ="dataDataSource")
public DruidDataSource druidDataSource(){
return new DruidDataSource();
}
@Bean(name ="dataTransactionManager")
public DataSourceTransactionManager dataSourceTransactionManager(){
return new DataSourceTransactionManager(druidDataSource());
}
@Bean(name ="dataSqlSessionFactory")
public SqlSessionFactory dataSqlSessionFactory(@Qualifier("dataDataSource") DataSource dataSource)throws Exception {
final SqlSessionFactoryBean sqlSessionFactoryBean =new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MAPPER_LOCAL));
Object();
}
}
把配置数据源的类写在公共module framework⾥,那么所有的module的l和对应接⼝都能扫描到(图⽚当中MAPPER_LOCAL变量写错了,应该在classpath后⾯加个"*",这样才能多module之间互相读取,请以代码块为准)。
其他xml共享读取的问题:
其他类型xml需要把路径写进yml才⾏(或者properties)。
这⾥举例l和l。
以classpath:l的形式写进yml(或者properties)就⾏了。注意是以resources为根⽬录开始写,其他module必须include该utils配置⽂件(请看第⼀步)。
test/java⾥默认是会有⼀个test启动类,如果需要把整个项⽬打包的话(开发项⽬都要),是要把它删除的,不然会启动不了springboot。
总结:这些问题是在我开发项⽬的时候遇到的,我在这⾥只是提个思路,并不代表你⽤了我的⽅法就⼀定能读取了,欢迎各位在评论⾥跟我进⾏讨论,必回。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。