错误重现
控制台打印的错误信息
Description:
The dependencies of some of the beans in the application context form a cycle:
projectingArgumentResolverBeanPostProcessor defined in class path resource [org/springframework/data/web/config/ProjectingArgumentResolverRegistrar.class]
↓
org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration
↓
myBatisConfig (field com.centling.consumer.druid.DynamicDataSource com.centling.consumer.config.MyBatisConfig.dataSource)
┌─────┐
| dataSource defined in class path resource [com/centling/consumer/druid/DynamicDataSourceConfig.class]
↑ ↓
| defaultDataSource defined in class path resource [com/centling/consumer/druid/DynamicDataSourceConfig.class]
↑ ↓
| org.springframework.boot.autoconfigure.jdbc.DataSourceInitializerInvoker
└─────┘
JAVA代码:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@SpringBootApplication
@ServletComponentScan
@EnableCaching // 开启缓存
@EnableAsync //开启异步调用
@EnableTransactionManagement
@EnableAutoConfiguration
public class TestApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
yml文件:
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://192.168.1.135:3606/your_database?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false
username: root
password: yourpassword
druid:
initial-size: 10
max-active: 100
min-idle: 10
max-wait: 60000
pool-prepared-statements: true
max-pool-prepared-statement-per-connection-size: 20
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 300000
validation-query: SELECT 1 FROM DUAL
test-while-idle: true
test-on-borrow: false
test-on-return: false
stat-view-servlet:
enabled: true
url-pattern: /druid/*
filter:
stat:
log-slow-sql: true
slow-sql-millis: 1000
merge-sql: true
wall:
config:
multi-statement-allow: true
解决方法
只需要改Java代码就可以了。
@SpringBootApplication
@ServletComponentScan
@EnableCaching // 开启缓存
@EnableAsync //开启异步调用
@EnableTransactionManagement
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class}) // 更改这一行,就可以避免循环引用错误了。
public class TestApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
注意改下面一行,就可以了。
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class}) // 更改这一行,就可以避免循环引用错误了。