如果我在Tomcat(或任何其他服务器)的单个实例上部署并运行相同应用程序的2个实例.然后将创建一个单独的对象(Singleton类):
所以基本上我想要理解的是,每个JVM都会创建一个Singleton类的单个对象吗?如果应用程序托管在Web服务器(或容器)上,这是如何工作的.
如何<param-value>为<param-name>servlet的<init-param>标记下的给定指定多个.以下是我的web.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>com.vogella.jersey.first</display-name>
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<!-- Register resources and providers under com.vogella.jersey.first package. -->
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.vogella.jersey.first</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
Run Code Online (Sandbox Code Playgroud)
参数jersey.config.server.provider.packages定义了Jersey将在哪个包中查找Web服务类.
我想在这里指定多个包名,因为我的服务类在不同的包中.像下面这样的东西,但它们都不起作用:
1)多个 <param-value>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.vogella.jersey.first</param-value>
<param-value>com.vogella.jersey.second</param-value>
</init-param>
Run Code Online (Sandbox Code Playgroud)
2)多个 <init-param>
<servlet>
...
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.vogella.jersey.first</param-value>
</init-param>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.vogella.jersey.second</param-value>
</init-param>
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?
我有3个班GrandParent,Parent和Child,其中
Child extends Parent和Parent extends GrandParent
public class Main {
void test(GrandParent gp){System.out.println("GrandParent");}
void test(Parent p){System.out.println("Parent");}
public static void main(String args[]){
GrandParent obj = new Child();
Main mainObj = new Main();
mainObj.test(obj); // This calls test(GrandParent gp)
mainObj.test(new Child()); // This calss test(Parent gp)
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,2调用test()方法都用Child对象调用不同的方法.其中一个是编译时和其他运行时绑定.这对我来说听起来很奇怪.你会怎么解释这个?
我们使用Swagger编辑器为我们的API规范创建了一个Yaml文件,其中包括基本URL,端点,请求,响应和头信息等.现在我想为这些API实现RESTful Web服务.为此,我正在考虑从这个Yaml文件生成我的Request和Response Java类,并且正在寻找某种代码生成器,最好是我可以在我的Maven项目中使用的maven插件/依赖项.我遇到了swagger,其中讨论了使用swagger-codegen Maven插件,但这是为了生成client我认为生成客户端代码以使用这些RESTful API,但是我需要生成要使用的类用于服务实施.我将使用Java和Spring框架.
我的问题是,当我们有Yaml文件(使用Swagger编辑器创建的API规范)以及可以使用哪些代码生成工具/插件时,在Java中实现RESTful Web服务的最佳实践是什么.
编辑:刚刚遇到这个服务器存根生成器HOWTO,进一步研究它.
public class Parent {
....
}
public class Child1 extends Parent {
....
public void foo() {
....
}
}
public class Child2 extends Parent {
....
public void foo() {
....
}
}
Run Code Online (Sandbox Code Playgroud)
这里的方法foo()只存在于Child类中,不能添加到Parent类(甚至不是抽象方法).在这种情况下,当我想调用类的引用的foo()方法时obj,Parent我需要使用intanceof多个if..else我想避免的方法.
Parent obj = ...// Object of one of the child classes
obj.foo();
Run Code Online (Sandbox Code Playgroud)
编辑:我需要使用类型obj为Parent唯一的.否则我将无法调用父类中存在的obj上的方法.
我的解决方案:我想的方法是定义一个接口,FooInterface用foo()方法说,让所有子类实现它,然后我可以输入强制转换obj到该接口并调用foo()方法,如下所示:
if(obj instanceof FooInterface){
((FooInterface)obj).foo();
}
Run Code Online (Sandbox Code Playgroud)
有更好的方法吗?或者对这个有什么改进?
我的 AWS 账户中有一个 RDS 数据库实例 (Aurora PostgreSQL) 设置。这是使用 AWS 控制台手动创建的。我现在想为该数据库创建 CloudFormation 模板 Yaml,如果需要,我可以稍后使用它来创建数据库。这也将帮助我在另一个环境中复制数据库。我还会将其用作基础设施自动化的一部分。
amazon-web-services amazon-rds aws-cloudformation amazon-aurora
我有Oracle DB 11g企业版,我想通过从文件中读取sql脚本来创建表.通过java代码我正在从文件中读取sql脚本并将其存储在String sqlBlock:
CREATE SEQUENCE VerHist_SeqNum
START WITH 1
INCREMENT BY 1;
CREATE TABLE VerHist
(
SequenceNumber NUMBER(10,0) NOT NULL,
SQLFileName VARCHAR2(100) NOT NULL,
STATUS VARCHAR2(10) NOT NULL,
AppliedDate DATE NOT NULL,
DateCreated DATE
DEFAULT (SYSDATE),
DateUpdated DATE
DEFAULT (SYSDATE),
CONSTRAINT PK_VerHist PRIMARY KEY( SequenceNumber ),
CONSTRAINT UC_VerHist_SQLFileNa UNIQUE( SQLFileName )
);
CREATE OR REPLACE TRIGGER VerHist_SeqNum_TRG
BEFORE INSERT
ON VerHist
FOR EACH ROW
BEGIN
SELECT VerHist_SeqNum.NEXTVAL INTO :NEW.SequenceNumber
FROM DUAL;
END;
Run Code Online (Sandbox Code Playgroud)
当我执行此查询时,它给出了
java.sql.SQLException:ORA-00911: 在Oracle的oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)的oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)处的无效字符\n .jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)at …
我们正在调用用于cxf-codegen-plugin从 WSDL 生成代码的Web 服务,并在 Spring xml 中配置了 JAX-WS 客户端,如下所示:
<jaxws:client id="abcApiInterface" serviceClass="abc.api.AbcApi" address="${xyz.abcApi.endpoint}" />
Run Code Online (Sandbox Code Playgroud)
我们有由 Apache CXF 3.0.3 生成的 Web 服务接口。我们在调用该服务时看到超时,我们没有在客户端指定任何超时,所以只想知道 JAX-WS 客户端超时的默认值是多少?
为了在整个应用程序中实现统一的异常处理,我将REST错误处理与Spring solution#3 @ControllerAdvice一起使用,并与一起使用@ExceptionHandler。
春季版本:4.3.22.RELEASE
Spring Boot版本:1.5.19.RELEASE
这是一个Spring Boot应用程序,下面是我的程序包结构。
src/main/java
com.test.app.controller
MyRestController.java -- This is my Rest controller
com.test.app.handler
RestExceptionHandler.java -- This is my ControllerAdvice class
Run Code Online (Sandbox Code Playgroud)
以下是我的ControllerAdvice代码,其中一个Controller引发,InvalidDataException但仍未@ExceptionHandler调用相应的控制器。相反,我Unexpected 'e'使用http 400作为响应正文。
@ControllerAdvice
public class RestExceptionHandler {
@ExceptionHandler(InvalidDataException.class)
@ResponseStatus(value = HttpStatus.BAD_REQUEST)
public @ResponseBody ErrorResponse handleValidationError(final InvalidDataException ex,
final WebRequest request) {
log.error("InvalidDataException message:{} ", ex.getMessage());
return getExceptionResponse("Failed with Invalid data" + ex.getMessage(), HttpStatus.BAD_REQUEST.value());
}
private ErrorResponse getExceptionResponse(final String message, final Integer errorCode) …Run Code Online (Sandbox Code Playgroud) exceptionhandler spring-boot spring-restcontroller controller-advice
我正在建立一个使用 JBoss 的 Java 项目,该项目是为我们的项目定制的。在 JBoss 配置下的属性文件之一中,它具有各种文件的绝对路径,如下所示:
com.mycompany.abc.host.certificate=file:///c:/somedir/jboss/myproject/configuration/security/xxx/test.crt
Run Code Online (Sandbox Code Playgroud)
我正在具有 macOS Sierra 的 MacBook 上设置我的开发环境。对于相应的 Windows 路径,macOS 上的等效路径是什么,例如此文件:/Users/john/jboss/myproject/configuration/security/xxx/test.crt
我可以HttpServletRequest在我的RestController类似下面自动装配吗,servletRequest即使它在高度并发的环境中执行,它也会返回不同的结果。我有一个限制,我不能作为方法参数,因为我正在实现一个自动生成的接口,不会HttpServletRequest作为方法参数。
@RestController
public class MyController implements MyInterface {
@Autowired
private HttpServletRequest servletRequest;
@Override
@RequestMapping(value = "/test", produces = {"application/json"}, consumes = {"application/json"}, method = RequestMethod.POST)
public ResponseEntity<MyResponse> test(@RequestBody final MyRequest payload){
...
}
...
}
Run Code Online (Sandbox Code Playgroud)
我已经浏览了这些 SO 问题和其他一些关于此的文章。但只是想确保当我们HttpServletRequest在控制器中自动装配时,它的Scope是Request?
Spring 3 MVC 从控制器访问 HttpRequest
如何在 Spring bean 中获取 HttpServletRequest?
注意:我确实尝试过这个,它似乎工作正常。但只是想确认即使在高度并发的环境中它也是一个万无一失的解决方案。此外,如果这是正确的方法,如果有人能解释它的工作原理,我将不胜感激。
我想在下面的场景中使用Java 8 Lambda表达式,但我得到的是在封闭范围内定义的局部变量fooCount必须是final或者有效的final.我理解的错误消息说什么,但我需要计算在这里比例,从而需要增加fooCount和barCount再计算百分比.那么实现它的方法是什么:
// key is a String with values like "FOO;SomethinElse" and value is Long
final Map<String, Long> map = null;
....
private int calculateFooPercentage() {
long fooCount = 0L;
long barCount = 0L;
map.forEach((k, v) -> {
if (k.contains("FOO")) {
fooCount++;
} else {
barCount++;
}
});
final int fooPercentage = 0;
//Rest of the logic to calculate percentage
....
return fooPercentage;
}
Run Code Online (Sandbox Code Playgroud)
我有一个选择是在AtomicLong这里使用而不是long但我想避免它,所以稍后如果可能的话我想在这里使用并行流.
java ×6
web-services ×2
amazon-rds ×1
class-design ×1
cxf ×1
filepath ×1
final ×1
httprequest ×1
inheritance ×1
instanceof ×1
java-8 ×1
jax-rs ×1
jax-ws ×1
jdbc ×1
jersey ×1
jvm ×1
lambda ×1
linux ×1
macos ×1
oop ×1
oracle ×1
oracle11g ×1
overloading ×1
polymorphism ×1
rest ×1
scope ×1
servlets ×1
singleton ×1
spring-boot ×1
spring-mvc ×1
sql ×1
timeout ×1
tomcat ×1
web.xml ×1
webserver ×1
window ×1
yaml ×1