小编jpa*_*ppe的帖子

Eclipse:在Tomcat中覆盖JNDI资源

我正在使用Eclipse中的Java Web应用程序并部署到由Eclipse运行的Tomcat实例.我正在尝试让这个应用程序通过JNDI Resource元素与另一台主机上的数据库通信.

应用程序中包含的context.xml文件尝试连接到在localhost上运行的MySQL服务器,如下所示:

<?xml version="1.0" encoding="UTF-8"?>

<Context>
    <Environment name="log4j.configuration"
    value="/path/to/installed/log4j.properties"
    type="java.lang.String" />

    <Resource name="jdbc/configDB" auth="Container" type="javax.sql.DataSource"
    username="dbuser" password="dbpassword" driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://localhost:3306/dbname" maxActive="8"
    validationQuery="SELECT 1" testOnBorrow="true" />

    <Environment name="mykey" value="installed" type="java.lang.String" />

</Context>
Run Code Online (Sandbox Code Playgroud)

当我在实际主机上安装它时,此配置有效.也就是说,它正确读取环境值并连接到数据库.

我也可以在单独的主机上安装它并编辑/etc/tomcat6/conf/Catalina/localhost/myaplication.xml以更改JDBC URL,如下所示:

...
    <Resource name="jdbc/configDB" auth="Container" type="javax.sql.DataSource"
    username="dbuser" password="dbpassword" driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://otherhost:3306/dbname" maxActive="8"
    validationQuery="SELECT 1" testOnBorrow="true" />
...
Run Code Online (Sandbox Code Playgroud)

此配置也有效.换句话说,我非常确信我的应用程序正确使用了JNDI.

所以,现在我想在Eclipse的桌面上将它部署到Tomcat.我已经以标准方式将项目添加到Tomcat,并且我已经编辑了服务器的context.xml文件(即Eclipse在"Servers"项目中的Tomcat服务器下显示的文件),如下所示:

<?xml version="1.0" encoding="UTF-8"?>

<Context>
    <Environment name="log4j.configuration"
    value=C:\workspace\myapplication\src\main\resources\conf\log_to_tomcat_console_log4j.properties"
    type="java.lang.String" />

    <Resource name="jdbc/configDB" auth="Container" type="javax.sql.DataSource"
    username="dbuser" password="dbpassword" driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://otherhost:3306/dbname" maxActive="8"
    validationQuery="SELECT 1" testOnBorrow="true" />

    <Environment name="mykey" value="desktop" …
Run Code Online (Sandbox Code Playgroud)

java eclipse tomcat jndi

6
推荐指数
1
解决办法
7491
查看次数

当没有指定content-type时,Spring MVC:@RequestBody

我有一个Spring MVC应用程序,它以JSON字符串的形式从外部系统接收HTTP请求,其响应与JSON字符串类似地返回.我的控制器正确地注解@RequestBody@ResponseBody我有集成测试,实际上发送请求,以确认一切正常.

但是,当我针对将要使用它的实际外部系统测试我的应用程序时,我发现传入的请求没有指定内容类型!这完全混淆了Spring并导致以下类型的错误:

DEBUG [] 2014-04-17 13:33:13,471 AbstractHandlerExceptionResolver.java:132 resolveException - Resolving exception from handler [com.example.controller.MyController@1d04f0a]: org.springframework.web.HttpMediaTypeNotSupportedException: Cannot extract parameter (ValidationRequest request): no Content-Type found
Run Code Online (Sandbox Code Playgroud)

那么,有没有办法MappingJacksonHttpMessageConverter迫使Spring通过以某种方式强制Spring使用自定义处理程序链或修改传入请求以显式设置内容类型来路由此类请求?

我尝试过几件事:

  • 扩展MappingJacksonHttpMessageConverter以使其canRead()canWrite()方法始终返回true.不幸的是,由于缺乏内容类型,Spring甚至无法在淘汰之前查看消息转换器.
  • 使用拦截器或Servlet过滤器手动设置内容类型.不幸的是,除了设置新属性之外,我无法看到这些机制中的任何一种实际上对传入请求进行更改的方法.

任何想法都表示赞赏.


为了解决以下评论,我@RequestMapping看起来像:

@RequestMapping(value="/{service}" )
public @ResponseBody MyResponseObject( @PathVariable String service, @RequestBody MyRequestObject request) {
Run Code Online (Sandbox Code Playgroud)

所以这里没有任何东西可以指定JSON,但是没有内容类型Spring似乎甚至没有从传入请求中构建我的请求对象(这是有道理的,因为它没有足够的信息来确定如何这样做).

至于@ geoand的评论,询问"为什么你不能在Servlet过滤器或Spring Interceptor中添加内容类型的http标头",答案是"因为我愚蠢而且忘记了servlet过滤器是如何工作的".这是我最终用来解决问题的方法,我将立即作为答案添加.

java spring json

6
推荐指数
1
解决办法
4039
查看次数

GitLab:防止用户接受自己的合并请求

我有一组开发人员在 GitLab 存储库中工作。我希望他们都能创建合并请求,但我想确保每个更改都有代码审查的书面记录,这意味着合并请求必须被作者以外的其他人接受。

我可以通过使用受保护的分支来设置一些模拟这一点的东西,但是只有一部分人可以接受合并请求到该分支。这是不必要的限制;只要经过代码审查,任何代码都可以被接受。

是否可以在 GitLab 中创建这样的工作流程?具体来说,是否可以进行设置以使用户无法接受他们自己的合并请求?

pull-request gitlab

5
推荐指数
1
解决办法
1674
查看次数

标签 统计

java ×2

eclipse ×1

gitlab ×1

jndi ×1

json ×1

pull-request ×1

spring ×1

tomcat ×1