我对spring boot应用程序有问题:
spring.bat init --artifactId=dbproto4 --boot-version=2.1.7.RELEASE --dependencies=jdbc,data-rest,web,thymeleaf,devtools,lombok,configuration-processor,security,data-jpa,data-jdbc,postgresql,actuator --description=dbproto4 --groupId=com.test --java-version=11 --name=dbproto4 --package-name=com.test.dbproto4 --version=0.0.1-SNAPSHOT
这是一个例外:
Exception in thread "restartedMain" java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'testService' available
所有文件都在应用程序根目录中
DBProto4应用程序:
@springbootplication公共类dbproto4application{
public static void main(String[] args) {
SpringApplication.run(Dbproto4Application.class, args);
ApplicationContext javaConfigContext = new AnnotationConfigApplicationContext(SpringConfig.class);
TestService testServiceObj = (TestService) javaConfigContext.getBean("testService");
testServiceObj.addNewUser();
Spring配置:
@EnableJdbcRepositories(basePackages = "com.test.dbproto4.infrastructure.storage.jdbcrepos")
@Configuration
public class SpringConfig { }
用户:
@Entity
@Table(name = "userstab")
public class User {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
private String name;
private String email;
...
}
用户存储库:
public interface UserRepository extends CrudRepository<User, Integer> {
}
应用程序属性:
server.port = 8082
## default connection pool
spring.datasource.hikari.connectionTimeout=20000
spring.datasource.hikari.maximumPoolSize=5
## PostgreSQL
spring.datasource.url=jdbc:postgresql://localhost:5432/example_db4
spring.datasource.username=someuser
spring.datasource.password=123456
spring.jpa.hibernate.ddl-auto=update
http://localhost:8084/执行器/beans/:
"testService": {
"aliases": [],
"scope": "singleton",
"type": "com.test.dbproto4.TestService",
"resource": "file [E:\\Java\\JavaProjects\\dbproto4\\target\\classes\\com\\test\\dbproto4\\TestService.class]",
"dependencies": [
"userRepository"
]
}
"userRepository": {
"aliases": [],
"scope": "singleton",
"type": "com.test.dbproto4.UserRepository",
"resource": null,
"dependencies": [
"(inner bean)#667aba3e",
"(inner bean)#22b3117e",
"(inner bean)#2607b66f",
"jpaMappingContext"
]
}
actuator显示了名为“testservice”的bean,但spring没有看到它。如何从applicationcontext获取bean“testservice”?
1条答案
按热度按时间uqjltbpv1#
解决方案
对dbproto4application类执行这些更改
问题
在spring引导应用程序中,您已经配置了两个不同的spring应用程序上下文。
注意,您创建的第二个应用程序上下文是从springconfig构建的,springconfig只能访问com.test.dbproto4.infrastructure.storage.jdbcrepos包中定义的bean。它不能访问testservicebean。