Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 获取的原因:org.springframework.beans.factory.BeanCreationException:使用Spring Boot 2创建名为的bean时出错_Postgresql_Spring Boot - Fatal编程技术网

Postgresql 获取的原因:org.springframework.beans.factory.BeanCreationException:使用Spring Boot 2创建名为的bean时出错

Postgresql 获取的原因:org.springframework.beans.factory.BeanCreationException:使用Spring Boot 2创建名为的bean时出错,postgresql,spring-boot,Postgresql,Spring Boot,我正在使用SpringBoot2创建web应用程序,并使用CommandLineRunner运行该应用程序以连接PostgreSql数据库 1。“链接库”界面: package com.example.demo; import org.springframework.data.repository.CrudRepository; import com.example.entity.Link; public interface LinkRepository extends CrudRepos

我正在使用SpringBoot2创建web应用程序,并使用CommandLineRunner运行该应用程序以连接PostgreSql数据库

1。“链接库”界面:

package com.example.demo;

import org.springframework.data.repository.CrudRepository;

import com.example.entity.Link;

public interface LinkRepository extends CrudRepository<Link, Long> {

}
    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;
        }

    }

    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());

                }
            };
        }
    }

  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

3。演示应用程序配置:

package com.example.demo;

import org.springframework.data.repository.CrudRepository;

import com.example.entity.Link;

public interface LinkRepository extends CrudRepository<Link, Long> {

}
    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;
        }

    }

    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());

                }
            };
        }
    }

  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

4。xml

    <?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>

我收到以下错误:

package com.example.demo;

import org.springframework.data.repository.CrudRepository;

import com.example.entity.Link;

public interface LinkRepository extends CrudRepository<Link, Long> {

}
    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;
        }

    }

    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());

                }
            };
        }
    }

  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.unsatifiedDependencyException:创建名为com.example.demo.DemoApplication中定义的“demo”的bean时出错:通过方法“demo”参数0表示的未满足的依赖关系;嵌套异常为org.springframework.beans.factory.BeanCreationException:创建名为“linkRepository”的bean时出错:调用init方法失败;嵌套异常为java.lang.IllegalArgumentException:不是托管类型:class com.example.entity.Link


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

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

`@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());
       }
    };
}
我只是喜欢这样做:

`@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) 应该是这样的

@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

}
@组件
公共类DemoBootstrap实现ApplicationListener{
私有最终链接存储库类别存储库;
公共DemoBootstrap(链接存储库链接存储库){
this.linkRepository=linkRepository;
}
@凌驾
@交易的
ApplicationEvent(ContextRefreshedEvent事件)上的公共无效{
//在此添加所有应保存的链接
//比如说
保存(新链接(“foo”、“bar”);
保存(新链接(“foo2”、“bar2”);
//等
}

您是否尝试移动
com.example.demo
包中的链接实体(即,移动到
com.example.demo.entity
包中?可能
scanBasePackages
没有按照您的预期工作。我还始终使用
@Repository
为存储库添加注释。感谢您的解决方案