在我的例子中,让我们考虑使用Spring Boot创建和配置的简单RESTful服务.该服务与数据库(例如Postgres)通信.
有什么区别:
.jar文件并通过我的远程公共主机运行它java -jar myservice.jar?要么
.war将其打包到文件并在Tomcat/Jetty上部署?第一个选项似乎更容易,你只需要运行一个.jar.在第二个选项中,您需要创建Tomcat实例,运行它然后部署.war文件.还有其他区别吗?这两种方法的优缺点是什么?
我有一个带有OAuth2安全性的Spring Boot REST API.
今天我升级我的版本的spring-boot-starter-parent,从1.4.2到1.5.2.
变化让我很困惑.
之前,我可以使用Postman测试我的REST API.当我的访问令牌不正确或我没有特定资源的权限时,服务器响应如下:
{
"error": "access_denied",
"error_description": "Access is denied"
}
Run Code Online (Sandbox Code Playgroud)
现在它一直将我重定向到/login页面...当我登录时 - 它显示我的资源而没有任何OAuth2身份验证...
我试图禁用它,我发现了这个神奇的属性:
security.oauth2.resource.filter-order = 3
Run Code Online (Sandbox Code Playgroud)
此行关闭重定向到登录页面.
但是,我的问题是:
我的代码中一些更重要的部分:
的pom.xml
<!--- .... -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.2.RELEASE</version>
</parent>
<properties>
<!--- .... -->
<spring-security-oauth.version>2.1.0.RELEASE</spring-security-oauth.version>
<!--- .... -->
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Monitor features -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-actuator</artifactId>
</dependency>
<!-- Security + OAuth2 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId> …Run Code Online (Sandbox Code Playgroud) PostgreSQL 39.6.控制结构: RETURN QUERY有一个变量RETURN QUERY EXECUTE,它指定要动态执行的查询.可以通过USING将参数表达式插入到计算的查询字符串中,其方式与EXECUTE命令中的方式相同.
但动态意味着什么?
这两个语句之间有什么区别(带func_param参数的内部函数):
RETURN QUERY SELECT * FROM foo WHERE foo_col = func_param;
Run Code Online (Sandbox Code Playgroud)
和
RETURN QUERY EXECUTE 'SELECT * FROM foo WHERE foo_col = $1' USING func_param;
Run Code Online (Sandbox Code Playgroud)
?
在postgres(和许多其他人)中,我们可以primary key用两种不同的方式声明:
方法1:
create table MyTable(
MyId SERIAL PRIMARY KEY
)
Run Code Online (Sandbox Code Playgroud)
方法2:
create table MyTable(
MyId SERIAL,
CONSTRAINT pk_myid PRIMARY KEY (MyId)
)
Run Code Online (Sandbox Code Playgroud)
我的问题是:这些声明之间是否有任何区别(语法除外)?也许Hibernate映射?或者也许其中一个被称为好习惯?
我已经知道的 - 第二个用于设置PRIMARY KEY多列.
我已经生成了一个 CXF 服务并120000ms = 2min为两者设置了超时:
requestContext.put("javax.xml.ws.client.receiveTimeout", 120000);
requestContext.put("javax.xml.ws.client.connectionTimeout", 120000);
Run Code Online (Sandbox Code Playgroud)
它工作正常,我已经对其进行了测试20s, 1min, 3min- 每次它都在等待响应的时间。
但是,当我想将其设置为5min. 服务仅等待响应~240800ms = ~4min。
我正在调用 jboss esb 服务。这个持续最大5min。CXF 服务是.jar从我的 PC的简单应用程序内部调用的,因此之间没有其他服务器/容器(如 tomcat 等)。
有什么想法可以修复我的超时设置吗?
用一个 Apache CXF 3.0.1
编辑
我现在意识到我收到 2 条不同的消息取决于我的超时设置:
如果我将它设置为<=4min(通过我的或@pedrofb 方法),那么在这段时间之后我会得到:
org.apache.cxf.interceptor.Fault:无法发送消息。在 org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:64) 在 org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307) 在 org.apache.cxf.endpoint.endpoint. .doInvoke(ClientImpl.java:516)
引起:java.net.SocketTimeoutException: SocketTimeoutException invoking http://esb:8080/MyService/ebws/Category/MyService : Read timed out
如果我将它设置为>4minor 0,我会得到:
javax.xml.ws.soap.SOAPFaultException: 没有收到服务 [Category:MyService] 的响应,被告知不要重试。
老实说,我很困惑什么是预期结果(我认为是第一个)
编辑 2
我已经MyService通过 …
java ×3
postgresql ×2
spring-boot ×2
esb ×1
hibernate ×1
jboss-esb ×1
jetty ×1
oauth ×1
oauth-2.0 ×1
primary-key ×1
timeout ×1
tomcat ×1
web-services ×1