当前位置: 首页 > 知识库问答 >
问题:

在Travis CI,Spring Boot和PostgreSQL中运行时,EntityManagerExcema

贺元明
2023-03-14

我使用Spring Boot、PostgreSQL、Maven和JUnit制作了一个简单的Web应用程序。在我的IDE(mvn清除验证)中运行它时,一切都很完美,但是在特拉维斯CI中运行时,我遇到了这个异常:

错误创建在类路径资源[org/springframe/boot/自动配置/orm/jpa/HibernateJpaAutoConfiguration.class]中定义名称'entityManagerFactory'的bean:调用init方法失败;嵌套异常是javax.persistence.持久性例外:[持久性单元:默认]无法构建Hibernate SessionFactory

还有很多其他的。我的测试在IDE中也运行得很好。有人能告诉我为什么吗?我的代码在这里:

实体:

@Entity
@Table(name = "contacts")
public class Contact extends BaseEntity{

    @Column(name = "name", nullable = false)
    private String name;

    public Contact() {
    }
    public Contact(String name) {
        this(null,name);
    }
    public Contact(Integer id, String name) {
        super(id);
        this.name = name;
    }

    public String getName() {
        return name;
    }

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

    @Override
    public String toString() {
        return "Contact{" +
                "id='" + id + '\'' +
                "name='" + name + '\'' +
                '}';
    }
}

存储库:

@Repository
public class ContactRepositoryImpl implements ContactRepository{

    private static final Logger LOG = LoggerFactory.getLogger(ContactRepositoryImpl.class);

    @Autowired
    private ProxyContactRepository proxyContactRepository;

    private Pattern regexPattern;

    @Override
    public List<Contact> getAllSorted(String nameFilter) {
        List<Contact> listOfAllContacts = new CopyOnWriteArrayList<>();
        try {
            regexPattern = Pattern.compile(nameFilter);
            if (!nameFilter.isEmpty() || nameFilter.length() != 0) {
                listOfAllContacts.addAll(getAll().stream().filter(contact -> notDoMatch(contact.getName())).collect(Collectors.toList()));
            } else {
                LOG.warn("Regex parameter " + "'" + nameFilter + "'" + " is empty");
                throw new NotFoundException("Regex parameter is empty");
            }
            return listOfAllContacts;
        }
        catch (PatternSyntaxException exception){
            LOG.error("Regex parameter " + "'" + nameFilter + "'" + " is invalid");
            throw new NotFoundException("Regex parameter is invalid");
        }
    }

    @Override
    public List<Contact> getAll() {
        return proxyContactRepository.findAll();
    }

    private boolean notDoMatch(String word){
        Matcher matcher = regexPattern.matcher(word);
        return !matcher.matches();
    }
}

控制器:

@RestController
@RequestMapping("/contacts")
public class ContactController extends AbstractContactController{

    @RequestMapping(method = RequestMethod.GET, params = "nameFilter")
    public List<Contact> getSortedPage(@RequestParam("nameFilter") String nameFilter){
        return super.getAllSorted(nameFilter);
    }

    @RequestMapping(method = RequestMethod.GET)
    public List<Contact> getAllPage(){
        return super.getAll();
    }
}

特拉维斯。yml

language: java
script: mvn clean verify
jdk: oraclejdk8

services:
- postgresql

before_script:
- psql -c 'create database hello;' -U postgres

app.properties:

spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://localhost:5432/hello
spring.datasource.username=postgres
spring.datasource.password=password

spring.jpa.hibernate.ddl-auto=validate
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQL81Dialect

共有1个答案

赵君植
2023-03-14

我建议使用H2进行集成测试,而不是PostgreSQL。您不需要设置任何TravisCI服务。您的测试套件将更加易于维护,并且不依赖于外部服务。您还可以使用H2与PostgreSQL的兼容性模式。

 类似资料:
  • 我将Rails5与PostgreSQL一起部署,以便在Heroku中免费应用程序。这是我在中的配置:

  • 注意:——如果你不喜欢sudo,可以查看非root用户使用 在Docker中安装PostgreSQL 如果Docker Hub中没有你需要的Docker镜像,你可以创建自己的镜像,开始先创建一个Dockerfile: 注意:这个PostgreSQL仅设置用途。请参阅PostgreSQL文档来调整这些设置,以便它是安全的。 # # example Dockerfile for http://docs

  • 在Docker中安装PostgreSQL 如果Docker Hub中没有你需要的Docker镜像,你可以创建自己的镜像,开始先创建一个Dockerfile: 注意:这个PostgreSQL仅设置用途。请参阅PostgreSQL文档来调整这些设置,以便它是安全的。 # # example Dockerfile for http://docs.docker.com/examples/postgresq

  • 航班类别:package com.rahul.flightreservation.entities; 表说明:ID航班号运营航空公司出发城市到达城市日期出发估计日期出发时间 错误:Hibernate:from Fligher where departurecity=?和到达=?和DateofDeparture=?2020-06-28 20:32:13.138警告5744---[nio-8083-e

  • Dave使用Flyway为Alice和Bob初始化模式,因此他们都有foo table和bar函数。Dave使用jOOQ生成java api,并在运行时将开发模式映射到用户模式。戴夫以前和他的任何一个客户都没有关系,突然发现自己是鲍勃的侄子。 但是爱丽丝和鲍勃后来都回来找戴夫,让他为他们写一些自动化。因此,Dave决定创建一个机器用户Rob,他可以访问Alice和Bob的模式。他可以重用所有相同的

  • 各位工程师,大家好! 我在试图创建一个胖罐子来执行cucumber测试时遇到了一个问题。最初,我按照指南从Baeldung设置测试。当在Maven测试阶段执行时,测试运行良好。当运行带有参数的mvn exec:java命令时,它也能正常工作。 然而,当我创建了一个胖罐子并试图执行测试时,我面临着错误 以下是我的项目的解释,它基本上与Baeldung的测试项目完全一样。 项目结构 直接从可执行jar