首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Spring 2创建名称错误的org.springframework.beans.factory.BeanCreationException:错误

使用Spring 2创建名称错误的org.springframework.beans.factory.BeanCreationException:错误
EN

Stack Overflow用户
提问于 2019-08-23 14:03:18
回答 2查看 377关注 0票数 0

我使用Spring 2创建web应用程序,并使用CommandLineRunner连接PostgreSql数据库运行应用程序

1。"LinkRepository“接口:

代码语言:javascript
复制
package com.example.demo;

import org.springframework.data.repository.CrudRepository;

import com.example.entity.Link;

public interface LinkRepository extends CrudRepository<Link, Long> {

}

2.“链接”实体:

代码语言:javascript
复制
    package com.example.entity;

    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.Table;

    @Entity
    @Table(name = "link")
    public class Link {

        @Id
        @GeneratedValue
        @Column(name = "id")
        private Long id;

        @Column(name = "NAME")
        private String name;

        @Column(name = "url", unique = true)
        private String url;

        public Link(String name, String url) {
            this.name = name;
            this.url = url;
        }

        public Long getId() {
            return id;
        }

        public void setId(Long id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getUrl() {
            return url;
        }

        public void setUrl(String url) {
            this.url = url;
        }

    }

3.演示应用程序Config:

代码语言:javascript
复制
    package com.example.demo;

    import org.springframework.boot.CommandLineRunner;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.context.annotation.Bean;

    import com.example.entity.Link;

    @SpringBootApplication(scanBasePackages = { "com.example" })
    public class DemoApplication {

        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class, args);
        }

        @Bean
        public CommandLineRunner demo(LinkRepository repository) {
            // TODO Auto-generated method stub      
            return (args) -> {
                repository.save(new Link("test", "link"));
                for (Link linkrepo : repository.findAll()) {
                    System.out.println(linkrepo.getName());

                }
            };
        }
    }

4. Pom.xml

代码语言:javascript
复制
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.7.RELEASE</version>
            <relativePath /> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.example</groupId>
        <artifactId>demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>demo</name>
        <description>Demo project for Spring Boot</description>

        <properties>
            <java.version>11</java.version>
        </properties>

        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-freemarker</artifactId>
            </dependency>


            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
            </dependency>

            <!-- https://mvnrepository.com/artifact/org.postgresql/postgresql -->
            <dependency>
                <groupId>org.postgresql</groupId>
                <artifactId>postgresql</artifactId>
            </dependency>
        </dependencies>

        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>

    </project>

5. Application.properties :

代码语言:javascript
复制
  spring.datasource.url=jdbc:postgresql://localhost:5432/TestDb
  spring.datasource.username=postgres
  spring.datasource.password=root
  spring.datasource.driver-class-name=org.postgresql.Driver
  spring.jpa.hibernate.ddl-auto = create
  spring.h2.console.enabled=true
  spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true
  spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
  spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults = false
  spring.jpa.database-platform=org.hibernate.dialect.PostgreSQL95Dialect

我收到以下错误:

org.springframework.beans.factory.UnsatisfiedDependencyException:错误创建名称为“com.example.demo.DemoApplication”的bean :通过方法‘演示’参数0表示的不满意的依赖关系;嵌套异常是org.springframework.beans.factory.BeanCreationException:错误创建名为“linkRepository”的bean :调用init方法失败;嵌套异常为java.lang.IllegalArgumentException:非托管类型: class com.example.entity.Link

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-23 14:48:52

添加@EntityScan("com.example.entity") on DemoApplication类或将DemoApplication移动到“com.example”包,然后spring将扫描所有子包。

票数 0
EN

Stack Overflow用户

发布于 2019-08-23 14:52:59

如果您想使用CommandLineRunner,那么应该是这样的:

代码语言:javascript
复制
`@SpringBootApplication(scanBasePackages = { "com.example" })
public class DemoApplication implements CommandLineRunner {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
       // TODO Auto-generated method stub      
       return (args) -> {
       repository.save(new Link("test", "link"));
       for (Link linkrepo : repository.findAll()) {
           System.out.println(linkrepo.getName());
       }
    };
}

我更喜欢这样做:

1)创建一个名为DemoBootstrap 2的新类,它应该是这样的

代码语言:javascript
复制
@Component
public class DemoBootstrap implements ApplicationListener<ContextRefreshedEvent> {

private final LinkRepository categoryRepository;

public DemoBootstrap(LinkRepository linkRepository) {
    this.linkRepository = linkRepository;
}

@Override
@Transactional
public void onApplicationEvent(ContextRefreshedEvent event) {
    // Here add all links that should be saved
    // for example
    linkRepository.save(new Link("foo", "bar"));
    linkRepository.save(new Link("foo2", "bar2"));

    // etc

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57627923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档