使用IDEA开发springboot多module模块项目的配置文件的共享读取问题

本文分享了在SpringBoot项目中实现模块化配置的经验,包括配置文件命名规范、包命名策略、启动类设置、依赖管理和XML文件共享技巧,旨在提高项目可维护性和扩展性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

版权声明:欢迎转载,注明作者和出处就好!如果不喜欢或文章存在明显的谬误,请留言说明原因再踩哦,谢谢,我也可以知道原因,不断进步! https://blog.youkuaiyun.com/csonst1017/article/details/85165463

最近在改一个项目,给这个项目套springboot框架,打算把项目所有的功能模块要用到的配置文件和工具类放到一个独立的module里(以下简称framework),其他module读取使用(省去了重复编写的麻烦),途中遇到很多问题,经过几个小时的琢磨,终于可以读取共享了。这里把几个关键点列出来,出错的都在这几个地方。

1.首先是springboot核心配置文件问题,我是用yml文件配置的,用properties也是一样的。
思路:把把公共module"framework"所需要的配置写在自己的module里,如图。
在这里插入图片描述

注意!!!
配置文件一定要以application-XX的形式命名,不然后续配置无法识别!
打勾的是一定要配的!!!profiles: utils表示给这个配置文件起名为utils(一定要和文件名扩展名一样)。

思路:其他module的yml需要读取公共module的yml,那么需要在其他module的yml配置:
在这里插入图片描述
我这里只写了两个模块(framework和system),因为system这个模块是启动入口所以我直接命名application,然后再profiles属性里添加:include(或active): utils,就可以引入application-utils.yml文件的所有内容了(如果是2个有扩展名的yml配置文件之间读取的话用active会报错,只能用include),如果system模块有独立的配置也可以在application.yml后面添加,提高扩展性。

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里的类。

5.xml文件共享读取问题

mybatis的xml共享读取问题:

xml文件一般都是mybaits的mapper的xml,这里我们需要在framework里写一个配置数据源的config类,在这个类里面扫描mapper.xml,如果这个没有配置好的话会出现autowired无法织入mapper接口的情况。
在这里插入图片描述

**
 * 啊里巴巴druid数据连接池配置
 *
 * @author gj
 * @date 2018/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));
        return sqlSessionFactoryBean.getObject();
    }

}

把配置数据源的类写在公共module framework里,那么所有的module的mapper.xml和对应接口都能扫描到(图片当中MAPPER_LOCAL变量写错了,应该在classpath后面加个"*",这样才能多module之间互相读取,请以代码块为准)。

其他xml共享读取的问题:
其他类型xml需要把路径写进yml才行(或者properties)。
这里举例mybatis-config.xml和logback-spring.xml。
在这里插入图片描述
以classpath:XX/XX.xml的形式写进yml(或者properties)就行了。注意是以resources为根目录开始写,其他module必须include该utils配置文件(请看第一步)。

6.test里的启动类需要删除(打包)

在这里插入图片描述

test/java里默认是会有一个test启动类,如果需要把整个项目打包的话(开发项目都要),是要把它删除的,不然会启动不了springboot。

总结:这些问题是在我开发项目的时候遇到的,我在这里只是提个思路,并不代表你用了我的方法就一定能读取了,欢迎各位在评论里跟我进行讨论,必回。

<think>好的,我现在需要帮助用户了解如何在IntelliJ IDEA中搭建一个包含前端和管理模块的Spring Boot项目,并根据给定的URL重新编写前后端代码的详细步骤。首先,我需要回顾用户提供的引用内容,确保信息准确且符合最新的IDEA版本。 用户提到了引用[4]中的2024.1.4版本IDEA的创建步骤,可能需要注意IDEA的更新对项目配置的影响。另外,引用[3]提到Spring Boot 3和Spring 6的支持,以及@ConstructorBinding注解的变化,这可能会影响依赖选择和配置方式。因此,在步骤中需要明确Spring Boot版本的选择,避免兼容性问题。 接下来,用户需要分模块实现,包括前端和管理模块。这通常涉及多模块的Maven或Gradle配置。根据引用[1]和[2],IDEA创建Spring Boot项目的常规步骤已经存在,但用户需要的是包含前后端模块的详细指南。可能需要指导如何创建父项目,然后添加子模块,如admin模块、frontend模块,以及可能的common模块共享依赖。 前端部分可能需要集成如Thymeleaf、React或Vue.js。考虑到用户提到根据URL重新编写代码,可能需要说明如何从给定的URL获取前端资源,或者如何配置前端框架与Spring Boot的集成。例如,使用Spring Boot作为后端API,前端通过REST调用交互,或者使用模板引擎渲染页面。 后端部分需要详细说明控制层、服务层、数据层的实现,包括如何配置数据库、安全模块等。引用[3]提到的@ConstructorBinding注解的变化可能需要提醒用户注意依赖注入的方式,特别是在使用配置属性时。 此外,用户需要各个模块的详细实现步骤,包括配置文件和代码结构。需要指导如何配置application.propertiesapplication.yml,设置端口、数据库连接等。同时,模块间的依赖关系需要明确,比如admin和frontend模块是否依赖common模块。 测试和运行也是关键步骤。需要说明如何启动应用,如何访问前端和管理界面,以及可能的常见错误排查,如依赖冲突、端口占用等。引用[4]提到了运行启动类的重要性,需确保用户正确执行。 最后,生成相关问题时要考虑用户可能的后续疑问,如环境配置、接口文档生成、权限管理等,这有助于用户进一步深入开发。 总结步骤: 1. 环境准备:确认IDEA版本和Spring Boot版本兼容性。 2. 创建父项目使用Spring Initializr,设置多模块结构。 3. 添加子模块:admin(管理后端)、frontend(前端)、common(公共依赖)。 4. 配置父pom.xml或build.gradle管理依赖。 5. 实现各模块代码结构,集成前端框架,配置控制器、服务、仓库。 6. 配置数据库和安全模块。 7. 测试运行,确保模块间通信正常。 8. 部署和打包注意事项。 需要确保每个步骤详细,并引用提供的资料,特别是IDEA的具体操作和Spring Boot的最新变化,避免用户遇到版本不兼容或配置错误的问题。</think>以下是在IntelliJ IDEA中搭建包含前端和管理模块的Spring Boot项目的详细步骤,结合最新版本(2024.1.4)特性与最佳实践: --- ### 一、项目创建与模块划分 1. **创建父项目** - 使用`File > New > Project`选择**Spring Initializr** - 设置包名/项目名(如`MultiModuleProject`),类型选**Maven**,JDK版本≥17(Spring Boot 3要求)[^3] - 依赖项勾选**Spring Web**, **Lombok**, **Thymeleaf**(若需服务端渲染) - 点击`Create`生成父项目 2. **添加子模块** - 右键父项目选择`New > Module`,依次创建: - `admin-module`(管理后台后端) - `frontend-module`(前端页面/API交互层) - `common-module`(公共工具类/DTO) - 每个子模块需在`pom.xml`中声明父项目坐标: ```xml <parent> <groupId>com.example</groupId> <artifactId>MultiModuleProject</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> ``` --- ### 二、前后端代码实现 #### 后端模块(admin-module) 1. **配置数据源** - 在`application.yml`中添加: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/admin_db username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver ``` 2. **实体类与Repository** ```java @Entity @Data // Lombok注解 public class AdminUser { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String username; private String role; } public interface AdminUserRepository extends JpaRepository<AdminUser, Long> {} ``` 3. **REST控制器** ```java @RestController @RequestMapping("/api/admin") @RequiredArgsConstructor // 构造器注入 public class AdminController { private final AdminUserRepository userRepository; @GetMapping("/users") public List<AdminUser> listUsers() { return userRepository.findAll(); } } ``` #### 前端模块(frontend-module) 1. **集成Vue.js** - 在`src/main/resources/static`下创建Vue项目: ```bash npm init vue@latest ``` - 配置`vue.config.js`代理: ```javascript devServer: { proxy: { '/api': { target: 'http://localhost:8080', changeOrigin: true } } } ``` 2. **调用后端API** ```javascript // src/components/UserList.vue axios.get('/api/admin/users') .then(response => { this.users = response.data; }) ``` --- ### 三、模块间依赖配置 1. **公共模块引用** 在`admin-module/pom.xml`中添加: ```xml <dependency> <groupId>com.example</groupId> <artifactId>common-module</artifactId> <version>${project.version}</version> </dependency> ``` 2. **跨域配置(可选)** ```java @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("http://localhost:3000"); } } ``` --- ### 四、运行与调试 1. **启动配置** - 右键`Application`类选择`Run 'Application'` - 前端同时启动:`npm run serve` 2. **访问路径** - 管理后台:`http://localhost:8080/admin` - 前端页面:`http://localhost:3000` ---
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值