SpringBoot多模块项目的问题及解决方案

最近在开发微服务项目,需要写成多模块的结构,又是一个新手,对其中的一些细节配置还不甚清晰,也找了其他大佬的博客参考,以下是我的项目部分

项目结构

在这里插入图片描述
总共有六个模块,最后是controller模块注册到注册中心去

遇到问题及解决方案

1、引入dao模块失败

首先是把数据库的配置写在controller模块的application.yml里,因为只有这个模块才会注册到eureka上。我看到很多博客上写需要写一个注解@MapperScan进行mapper的扫描,确实是要加,我这边是写了两个配置类,一个是mybatis配置,另一个是MapperScan的配置类

@Configuration
public class MybatisConfig {
    @Value("${mybatis.mapper-locations}")
    private String mapperLocationPattern;

    @Bean
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource dataSource(){return new com.alibaba.druid.pool.DruidDataSource();
    }

    @Bean(name="sqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory() throws  Exception{
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource());
        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        sqlSessionFactoryBean.setMapperLocations(resolver.getResources(mapperLocationPattern));
        return sqlSessionFactoryBean.getObject();
    }
}
@Configuration
@AutoConfigureAfter(MybatisConfig.class)
@MapperScan("com.boss.train.permission.dao.permissiondao.mapper")
public class MybatisMapperScannerConfig {
    public MapperScannerConfigurer mapperScannerConfigurer(){
        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
        mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");
        mapperScannerConfigurer.setBasePackage("com.boss.train.permission.dao.permissiondao.mapper");
        return mapperScannerConfigurer;
    }
}

将这两个配置写在controller模块后测试能够成功

2、service模块导入失败

在controller模块测试service模块时,使用@Autowired注解注入service时报错,因为此时并没有扫描到service,需要在启动类上进行包的一个扫描,我这边扫描包的范围设置的比较大,基本上全部的包都可以被扫描到

@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class},scanBasePackages = {"com.boss.train.permission"})

3、运行项目时发现修改数据能够成功且数据库也更新了,但是页面没有进行更新

在项目里我使用了redis进行缓存,查询到的数据会进行缓存,之后的查询就不再走数据库了,而是直接从缓存中读取。我在service模块方法里加了缓存注解@Cacheable和@CachePut,后面我在更新的方法上将注解换成了@CacheEvict,更新后删除redis中的缓存,后面页面显示正常

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值