在哪里放置activejdbc.properties文件以引用ActiveJDBC中的database.properties文件?

时间:2018-02-08 17:13:50

标签: java maven activejdbc

我已经从NetBeans上的Maven原型jersey-quickstart-webapp创建了一个Jersey项目。我正在使用ActiveJDBC进行数据持久化。在其文档中,可以引用数据库连接属性的外部文件:http://javalite.io/database_connection_management#location-of-property-file

我已按照说明操作,我有activejdbc.properties(位于 project-ws / src / main / )文件内容:

env.connections.file=C:\dev\database.properties

database.properties文件:

development.driver=com.mysql.jdbc.Driver
development.username=user_db
development.password=*****
development.url=jdbc:mysql://192.168.0.19/customersdb

test.driver=com.mysql.jdbc.Driver
test.username=user_db
test.password=*****
test.url=jdbc:mysql://192.168.0.19/customersdb

production.jndi=java:comp/env/jdbc/acme

另外,我有这个网络服务:

@Path("telephone")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class TelephoneResource {
    @GET
    public Response get() {
        try {
            Base.open();

            LazyList<Telephone> tels= Telephone.findAll();

            String telsJson = tels.toJson(true);

            Base.close();

            return Response.ok().entity(telsJson).build();
        } catch (Exception ex) {
            return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("{\"error\": \"" + ex.getMessage() + "\"}").build();
        }
    }
}

但是当我尝试执行该GET资源时,收到此错误消息:

{
    "error": "Could not find configuration in a property file for environment: development. Are you sure you have a database.properties file configured?"
}

我也尝试过其他配置:

使用pom.xml

将它们添加到maven-surefire-plugin文件中
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.13</version>
    <configuration>
        <systemPropertyVariables>
            <activejdbc.url>jdbc:mysql://192.168.0.19/customersdb</activejdbc.url>
            <activejdbc.user>user_db</activejdbc.user>
            <activejdbc.password>*****</activejdbc.password>
            <activejdbc.driver>com.mysql.jdbc.Driver</activejdbc.driver>
        </systemPropertyVariables>
        <environmentVariables>
            <ACTIVEJDBC.URL>jdbc:mysql://192.168.0.19/customersdb</ACTIVEJDBC.URL>
            <ACTIVEJDBC.USER>user_db</ACTIVEJDBC.USER>
            <ACTIVEJDBC.PASSWORD>*****</ACTIVEJDBC.PASSWORD>
            <ACTIVEJDBC.DRIVER>com.mysql.jdbc.Driver</ACTIVEJDBC.DRIVER>
        </environmentVariables>
    </configuration>
</plugin>

但他们也没有用。

1 个答案:

答案 0 :(得分:1)

此页面: http://javalite.io/database_connection_management#location-of-property-file 陈述:

将一个文件activejdbc.properties添加到类路径根目录下的项目中,并在其中配置一个属性:

这意味着该文件需要位于类路径的根目录中。 由于您使用Maven,这意味着:

src/main/resources/database.properties

看看这个应用程序,完成测试:https://github.com/javalite/simple-example

此外,在控制器内打开连接是一种非常糟糕的方法。由于您没有使用ActiveWeb manages connections automatically,您可以编写一个类似于ActiveJdbcFilter的简单Servlet过滤器,并从您的资源中获取Base.open()/Base.close()代码:

public class TelephoneResource {
    @GET
    public Response get() {
        try {
            return Response.ok().entity(Telephone.findAll().toJson(true)).build();
        } catch (Exception ex) {
            return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("{\"error\": \"" + ex.getMessage() + "\"}").build();
        }
    }
}

如果您想探索ActiveWeb,以下是Rest Webapp的一个简单示例:https://github.com/javalite/activeweb-rest