写在前边: 最近在写一个商城,使用Maven聚合工程来管理,但是其中搭建环境遇见了各种的坑。
的标签这个标签在继承了Springboot的时候,就不要加这个标签,否则子工程无法找到spirngboot依赖。
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.3.1.RELEASEversion>
<relativePath/>
parent>
此时不要加:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druid-spring-boot-starterartifactId>
<version>${druid.version}version>
dependency>
dependencyManagement>
这个springboot的plugins加到启动类就好。
<build>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
<configuration>
<fork>truefork>
configuration>
<executions>
<execution>
<goals>
<goal>repackagegoal>
goals>
execution>
executions>
plugin>
java.lang.IllegalStateException: Failed to load ApplicationContext
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'helloController': Unsatisfied dependency expressed through field 'userInfoService'
原因是:springboot从启动类所在包开始,扫描当前包及其子包下的所有文件。
但是我的包:启动类在com.huixian.admin下,所以无法扫描到其它的子项目的组建
解决方法: 在启动类上加上扫描的包:@ComponentScan(basePackages = "com.huixian")
@SpringBootApplication
//配置Mapper扫描的地址
@MapperScan("com.huixian.system.mapper")
//配置扫描包的地址!重点!!!
@ComponentScan(basePackages = "com.huixian")
public class HuiXianAdminApplication {
public static void main(String[] args) {
SpringApplication.run(HuiXianAdminApplication.class, args);
}
}
聚合工程中,每个依赖需要明确,如果A工程依赖B工程,B工程又依赖A工程,那么会冲突。
一般B工程导入了A工程依赖,B工程也会有A工程的所有依赖。
# 配置数据源
datasource:
# druid数据库连接池
type: com.alibaba.druid.pool.DruidDataSource
username: root
password: 123456
url: jdbc:mysql://localhost:3306/huixian?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
# druid设置
# 初始连接数
initialSize: 5
# 最小连接池数量
minIdle: 5
# 最大连接池数量
maxActive: 20
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 300000
# 配置检测连接是否有效
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
# filters: stat,wall,log4j 需要导入log4j
filter: stat,wall
maxPoolPreparedStatementPerConnectionSize: 20
useGlobalDataSourceStat: true
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
配置类:
/**
* 德鲁伊配置
* @author JUNSHI
* @create 2020-07-25 14:09
*/
@Configuration
public class DruidConfig {
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DataSource druid(){
return new DruidDataSource();
}
/**
* 配置Druid后台的监控
*/
@Bean
public ServletRegistrationBean statViewServlet() {
ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
Map<String,String> initParams = new HashMap<>();
//后台用户名
initParams.put("loginUsername","admin");
//后台密码
initParams.put("loginPassword","123456");
// ""表示默认所有可以访问
initParams.put("allow","");
//禁止谁访问
//initParams.put("loginUsername","admin");
bean.setInitParameters(initParams);
return bean;
}
@Bean
public FilterRegistrationBean webStatFilter(){
FilterRegistrationBean bean = new FilterRegistrationBean();
bean.setFilter(new WebStatFilter());
Map<String,String> initParams = new HashMap<>();
//设定不收集的请求
initParams.put("exclusions","*.js,*.css,/druid/*");
bean.setInitParameters(initParams);
bean.setUrlPatterns(Arrays.asList("/*"));
return bean;
}
}