小编Luc*_*sio的帖子

Spring JDBC连接池的最佳实践

我有一个基本的Spring JDBC应用程序,它具有非常基本的配置:

<bean id="myDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
   <property name="driverClassName" value="oracle.jdbc.OracleDriver"/>
   <property name="url" value="jdbc:oracle:thin:@1.1.1.1:1521:XXX"/>
   <property name="username" value="username"/>
   <property name="password" value="password"/>
</bean>

<bean id="dbThing" class="com.DbThing">
   <property name="dataSource" ref="myDataSource"/>
</bean>
Run Code Online (Sandbox Code Playgroud)

我想介绍一个连接池,并在阅读了几个线程后,我对使用哪个池库感到有点困惑.

似乎在SO上有更多学分的图书馆是CP30DBCP.由于我使用的是Oracle,我还可以使用驱动程序提供的池数据源.我知道有更多的库可用 - 例如新的Apache Tomcat 7池库.

有没有我应该避免的图书馆?

我应该在给定的库中使用任何推荐的配置吗?

你想分享的任何"战争故事"?

java spring connection-pooling c3p0 apache-commons-dbcp

38
推荐指数
4
解决办法
8万
查看次数

将ThreadLocal传播到从ExecutorService获取的新线程

我使用ExecutorService和Future(这里是示例代码)在一个带有超时的单独线程中运行一个进程(线程"生成"发生在AOP方面).

现在,主线程是Resteasy请求.Resteasy使用一个或多个ThreadLocal变量来存储我需要在Rest方法调用中的某个时刻检索的一些上下文信息.问题是,由于Resteasy线程在新线程中运行,因此ThreadLocal变量将丢失.

将Resteasy使用的任何ThreadLocal变量"传播"到新线程的最佳方法是什么?似乎Resteasy使用多个ThreadLocal变量来跟踪上下文信息,我想"盲目地"将所有信息传递给新线程.

我查看了子类化ThreadPoolExecutor并使用beforeExecute方法将当前线程传递给池,但我找不到将ThreadLocal变量传递给池的方法.

有什么建议吗?

谢谢

java multithreading thread-local resteasy threadpool

29
推荐指数
2
解决办法
3万
查看次数

Angular.js框架的附加js文件是什么?

我正在尝试angular.js,我对我应该导入的javascript文件的数量感到困惑.在1.0.1版本中有许多其他文件,例如:

  • 角引导-1.0.1.js
  • 角架1.0.1.js
  • 角资源1.0.1.js
  • 角的sanitize-1.0.1.js

当然,我打开这些文件试图了解它们的功能.例如,angular-loader有一条评论说:

Interface for configuring angular {@link angular.module modules}.
Run Code Online (Sandbox Code Playgroud)

对我来说,它听起来像一个重要的模块,但我的简单的应用程序没有它工作正常...

要我全部导入吗?

javascript angularjs

22
推荐指数
2
解决办法
1万
查看次数

Java 7 String switch反编译:意外指令

我已经反编译了一个使用新的Java 7字符串切换功能的非常简单的类.

班级:

public class StringSwitch {

    public static void main(String[] args) {

        final String color = "red";
        switch (color) {
            case "red":
                System.out.println("IS RED!");
                break;
            case "black":
                System.out.println("IS BLACK");
                break;
            case "blue":
                System.out.println("IS BLUE");
                break;
            case "green":
                System.out.println("IS GREEN");
                break;
        }

    }

}
Run Code Online (Sandbox Code Playgroud)

针对此类运行Java 7"javap",会生成一组有趣的指令(完整的反汇编代码可在此处获得):

public static void main(java.lang.String[]);
    flags: ACC_PUBLIC, ACC_STATIC

    Code:
      stack=2, locals=4, args_size=1
        ...
        12: lookupswitch  { // 4

                  112785: 56

                 3027034: 84

                93818879: 70

                98619139: 98
                 default: 109
            }
        56: aload_2       
        57: ldc …
Run Code Online (Sandbox Code Playgroud)

java decompiling switch-statement java-7

14
推荐指数
1
解决办法
1176
查看次数

在Jetty上启用远程JMX

我正在尝试在Windows上运行的Jetty 6.1.26实例上启用远程JMX.我尝试了几种方法,但结果总是一样的:

当我尝试从jconsole连接到service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi我得到"连接被拒绝".

我在互联网上找到了几个指南,但似乎没有人帮忙.请注意我从"Jetty-Service.exe"包装器中独立运行Jetty.

如果有人能提出一种在码头上启用远程JMX的方法,那就太好了.

java jmx jetty

8
推荐指数
1
解决办法
2万
查看次数

Jenkins:从shell脚本设置env变量

我有一个bash脚本,我使用"执行shell"从Jenkins作业执行.该脚本启动EC2实例并设置host包含新实例的主机名的变量.

我想将新实例的主机名(脚本变量host:)设置为Jenkins环境变量,以便我可以将其传递给下游作业(可能使用Build Flow插件).

知道怎么做吗?

谢谢

shell environment-variables jenkins

8
推荐指数
1
解决办法
1万
查看次数

Spring AOP:访问参数名称

我正在使用Spring 3.x,Java 6.

我有一个带有以下连接点的@Around方面:

@Around("execution(public * my.service.*.*Connector.*(..))")
Run Code Online (Sandbox Code Playgroud)

因此,我基本上对拦截所有对类的公共方法的调用感兴趣,类名以"Connector"结尾.到现在为止还挺好.

现在,在我的方面,我想访问方法的实际参数名称:

public doStuff(String myarg, Long anotherArg)
Run Code Online (Sandbox Code Playgroud)

myarg另一个Arg

我明白使用:

CodeSignature signature = (CodeSignature)jointPoint.getSignature();
return signature.getParameterNames();
Run Code Online (Sandbox Code Playgroud)

将实际工作,但只有我用" -g "标志(完全调试)编译代码,我宁愿不这样做.

有没有其他方法可以访问这种运行时信息.

谢谢L

java spring spring-aop

7
推荐指数
2
解决办法
9523
查看次数

Spring Security:如果缺少@PreAuthorize注释,则拒绝访问控制器方法

我有一个Web应用程序配置为以标准方式使用Spring Security 3.2.

我正在使用@PreAuthorize注释来保护Controllers方法.现在,我想拒绝访问每个控制器方法,除非它被注释@PreAuthorize.

我尝试了以下方法:

超级控制器

每个控制器都从一个带有注释的超级控制器扩展:@PreAutorize("denyAll").这种方法似乎不起作用,因为忽略了控制器的方法注释.一切都是被禁止的.

@PreAutorize("denyAll") 
public class SuperController {

}

public class MyController extends SuperController {

    @PreAuthorize("hasRole('SUPERHERO')")
    @RequestMapping(value = URL_PREFIX + "Add.do", method =  RequestMethod.GET)
    public String doStuff(Model model) {

        ...
    }

}
Run Code Online (Sandbox Code Playgroud)

AOP

在全局方法安全标记中使用切入点表达式

<global-method-security pre-post-annotations="enabled">
    <protect-pointcut expression="execution(* com.acme.*Controller.*(..))" access="denyAll" />
 </global-method-security>
Run Code Online (Sandbox Code Playgroud)

这种方法也失败了:仍然可以访问未注释的控制器方法.

java spring spring-security

7
推荐指数
1
解决办法
1199
查看次数

Groovy:将XML节点附加到现有XML文档

我正在使用Groovy,我正在尝试将xml节点插入到使用XmlSlurper解析的xml文档中.我设法在文档的末尾添加节点,但不是我真正需要的地方.

原始文件:

<xml-fragment xmlns:ser="http://www.bea.com/wli/sb/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:con="http://www.bea.com/wli/sb/pipeline/config"> 
    <ser:coreEntry isProxy="true" isEnabled="true" isTracingEnabled="false">
        <ser:binding type="SOAP" isSoap12="false" xsi:type="con:SoapBindingType" xmlns:con="http://www.bea.com/wli/sb/services/bindings/config">
          <con:wsdl ref="bus/src/main/osb/interfaces/apilink/ChargeServices"/>
          <con:port>
            <con:name>ChargeServicesPort</con:name>
            <con:namespace>java:dk.tdc.apilink.logic.sessions.interfaces</con:namespace>
          </con:port>
          <con:selector type="SOAP body"/>
        </ser:binding>
    </ser:coreEntry>
</xml-fragment>
Run Code Online (Sandbox Code Playgroud)

要添加的片段

def fragmentToAddXml = '''
<ser:security xmlns:ser="http://www.bea.com/wli/sb/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:con="http://www.bea.com/wli/sb/pipeline/config">hello</ser:security>
'''
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的代码.

def root = new XmlSlurper().parseText(file.getText())

root.'core-entry'.appendNode( fragmentToAddXml )
def xmlBuilder = new groovy.xml.StreamingMarkupBuilder().bind{ mkp.yield root }
Run Code Online (Sandbox Code Playgroud)

请注意,新的节点应该放在之前的"SER:结合"节点.

结果应该是:

<xml-fragment xmlns:ser="http://www.bea.com/wli/sb/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:con="http://www.bea.com/wli/sb/pipeline/config"> 
        <ser:coreEntry isProxy="true" isEnabled="true" isTracingEnabled="false">
            <ser:security xmlns:ser="http://www.bea.com/wli/sb/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:con="http://www.bea.com/wli/sb/pipeline/config">hello</ser:security>

            <ser:binding type="SOAP" isSoap12="false" xsi:type="con:SoapBindingType" xmlns:con="http://www.bea.com/wli/sb/services/bindings/config">
              <con:wsdl ref="bus/src/main/osb/interfaces/apilink/ChargeServices"/>
              <con:port>
                <con:name>ChargeServicesPort</con:name>
                <con:namespace>java:dk.tdc.apilink.logic.sessions.interfaces</con:namespace> …
Run Code Online (Sandbox Code Playgroud)

xml groovy

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

为什么 spring-boot-starter-logging 需要依赖 log4-to-slf4j

我有一个使用spring-boot-starter. dependecy:tree当我在 Maven 中运行目标时,我发现这spring-boot-starter-logging取决于logback和 (间接)log4j。为什么spring-boot-starter-logging需要依赖log4-to-slf4j

在此输入图像描述

logging log4j spring-boot

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