为了更好地理解Spring:例如,我想开发一个Web门户和数据访问层(使用JPA / Hibernate / MySQL等)作为不同的 Spring-Boot 项目,使用Maven或Gradle来集成两个件。
有办法吗?还有其他最佳实践可以组织一个涉及很多人的大项目吗?
我可以为每一个定义一个主类,还是可能导致问题?
注意:在这种情况下,Web门户代表集成点:它导入DAL的jar,而不是相反。
答案 0 :(得分:2)
在您的场景中我个人会做的是将Web门户模块设为Spring Boot项目,而数据访问层不是Spring Boot项目(因为它不应该在它上面运行) )。 所有自动配置都将由Web门户模块完成(当然,这需要将数据访问层作为依赖项包含在内)。
数据访问层的单元和集成测试可以在有或没有测试的情况下轻松运行该模块上的Spring Boot配置
答案 1 :(得分:1)
这当然是可能的。一旦掌握了它,设置很简单 - 只是库中的配置类和消费应用程序中的@Import。
注意:到目前为止,我只使用JPA和自动装配对此进行了测试,我相信它应该适用于最常见的Spring功能但尚无法确认。
所以在你的库中的src / main / etc ..
@Configuration
@EntityScan(basePackages = "uk.co.company.name.models")
@ComponentScan(basePackages = { "uk.co.company.name" })
@EnableJpaRepositories("uk.co.company.name")
public class LibraryNameConfig {
}
然后在src / test
中@SpringBootApplication
@Import({ LibraryNameConfig.class})
public class FakeTestApp {
public static void blah() {}
}
正常测试
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = FakeTestApp.class)
public class TestTestModelWiredUp {
@Autowired
TestModelService testModelService;
@Test
public void contextLoads() {
}
}
这应该可以很好地与标准gradle / mvn一起生成一个经过测试的jar。
然后在另一个Spring Boot应用程序中使用它包括jar作为依赖,就像你标准的那样
要使它在应用程序中工作,您只需要再次@Import它,如上所述。我已经使用导入的配置类以相同的方式设置了我的应用程序和库。似乎有很多方法可以使用注释在Spring Boot中配置内容,这个设置对我有用。
@SpringBootApplication
@Import({ LibraryNameConfig.class, RealAppConfig.class})
public class SpringBootApp {
public static void aFunction() {}
}
您需要在库中进行application.properties进行测试,但是当它作为库包含时,它将使用应用程序。