我已经从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>
但他们也没有用。
答案 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