以前花了一个周写了一个springboot的demo,主要整合了swagger,spring data jpa,还有一些切面日志的应用。java
后来直接用来作项目,在写设计文档的时候绞尽脑汁分了好几个模块,为了更好的解耦和扩展。因而就把demo拆成了多个maven模块,但随即就出现了问题,花了一天时间解决。好伤。web
各个模块:spring
解决方案:springboot
@SpringBootApplication @ComponentScan(basePackages = {"cn.kl.eds.web", "cn.kl.eds.service"}) @EnableJpaRepositories(basePackages = "cn.kl.eds.dao") @EntityScan(basePackages = "cn.kl.eds.entity") public class App{ //发射App public static void main(String[] args) { SpringApplication.run(App.class, args); } }
问题一:没法装载service中的@Servicemaven
App启动类使用 @ComponentScanide
主要原理是,@SpringBootApplication这个注解包括了@ComponentScan,但它默认是扫描App.class所在的包,因此,须要显示扫描指定的包。spa
问题二:没法装载 spring data jpa 的接口,如UserRepo.net
App启动类使用 @EnableJpaRepositories设计
@Repository public interface UserRepo extends JpaRepository<User, Integer> { @Override @Query("select u from #{#entityName} u where u.id = ?1") User findOne(Integer id); }
问题三:能够装载jpa接口了,可是实体类 "Not a managed type"日志
App启动类使用 @EntityScan
我是在下面的评论中看到的,整个过程差点疯掉 -_-