小编Joh*_*n29的帖子

停止接受新的TCP连接而不删除任何现有的连接

我有两台服务器正在侦听负载均衡器后面的TCP端口.负载均衡器可以检测来自客户端的TCP连接尝试是否失败,并在不删除该连接的情况下将其重试到第二个服务器.我希望能够在不丢弃单个客户端集合的情况下将这两个服务器中的任何一个用于维护.

我的服务器使用此代码处理客户端请求:

ServerSocketFactory ssf = ...
ServerSocket serverSocket = ssf.createServerSocket(60000);
try {
    while (true) {
        Socket socket = serverSocket.accept();
        ...// Do the processing
    }
} catch (IOException e) {
    ...
}
...
Run Code Online (Sandbox Code Playgroud)

我最初的想法是添加一个布尔值,该布尔值将在应用程序关闭时设置,并serverSocket.accept()在等待处理和关闭所有现有连接时阻止新调用.但是,即使在serverSocket.accept()通话之前,也正在建立新的连接.这是我在Wireshark中看到的,如果我在该调用之前放置一个断点. 在此输入图像描述 问题就在于,一旦我打电话serverSocket.close(),所有这些客户端连接都会被丢弃.我想要实现的是告诉ServerSocket停止接受所有新连接(即只为新连接发送RST或让它们超时)的一些方法,因此负载均衡器可以将它们重新路由到另一台服务器,但同时不会掉线任何已经建立的联系.

编辑:我正在寻找一些自动解决方案,每次我想更新应用程序时都不需要我更改任何负载均衡器或操作系统设置.

java sockets tcp high-availability

10
推荐指数
1
解决办法
1106
查看次数

对于多个Java版本,避免在Eclipse中"没有在严格兼容的工作空间中安装JRE"警告

我知道关于这个警告已经有很多问题,但我的问题有点不同.我知道我可以使用此配置pom.xml来修复它

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
    </plugins>
</build>
Run Code Online (Sandbox Code Playgroud)

这消除了警告,但前提是我在Eclipse中安装并配置了Java 7.例如,如果我只有Java 8,我仍然会看到警告,除非我将上面配置中的版本更改为1.8:

构建路径指定执行环境JavaSE-1.7.工作区中没有安装与此环境严格兼容的JRE.

我的项目与Java 7,8,9和10兼容.我想要实现的是,如果安装了任何这些版本的Java而没有更改我的版本pom.xml以匹配当前安装的Java版本,则要避免此警告.告诉Eclipse Java 7或其他任何东西都是好的.

该项目仍然可以通过警告进行编译和工作,它只是让人分心,因为它标记了项目有问题.我知道我可以在Eclipse设置中隐藏这种类型的警告,但有没有办法通过仅使用一些配置来摆脱它pom.xml

java eclipse m2eclipse maven m2e

9
推荐指数
1
解决办法
2020
查看次数

如何使 Maven Javadoc 插件适用于任何 Java 版本

我正在使用 Maven Javadoc 插件,如下所示

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <version>3.1.1</version>
    <executions>
        <execution>
            <id>attach-javadocs</id>
            <goals>
                <goal>jar</goal>
            </goals>
        </execution>
    </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

我安装了多个 JDK 版本,并且希望能够使用其中任何一个版本构建项目。上面的配置在 Java 8 上工作正常,但在 Java 11 上失败并出现以下错误

无法在项目上执行目标 org.apache.maven.plugins:maven-javadoc-plugin:3.1.1:jar (attach-javadocs) ...: MavenReportException: 生成 Javadoc 时出错: 无法找到 javadoc 命令: 环境变量JAVA_HOME 设置不正确。

显而易见的解决方案是设置 JAVA_HOME。但正如我提到的,我有多个版本的 JDK,因此每次我想使用另一个版本时都重新配置 JAVA_HOME 一点也不方便。

另一个解决方案(来自Unable to find javadoc command - maven)是将以下配置添加到插件中:

<configuration>
    <javadocExecutable>${java.home}/bin/javadoc</javadocExecutable>
</configuration>
Run Code Online (Sandbox Code Playgroud)

这使得它可以与 Java 11 一起使用,但会破坏 Java 8,因为javadoc位置就${java.home}/../bin/javadoc在这种情况下。

理想情况下,我总是想从 Maven 使用的 java 可执行文件所在的目录中使用javadoc,但我还没有找到使用 Maven Javadoc 插件来实现这一点的方法。

java maven maven-javadoc-plugin

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

Spring Security 3.2.0.RC1 - <http>元素和不推荐使用的方法

升级到Spring Security 3.2.0.RC1后,我收到警告"方法'setFilterProcessesUrl' <http auto-config="true">在我的xml配置中被标记为已弃用" .即使是非常简单的配置,我也会收到此警告:

<beans:beans xmlns="http://www.springframework.org/schema/security"
    xmlns:beans="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/security
    http://www.springframework.org/schema/security/spring-security.xsd">

    <http auto-config="true">
        <intercept-url pattern="/myurl*" access="ROLE_USER" />
    </http>

    <authentication-manager>
        <authentication-provider>
            <user-service>
                <user name="user1" password="12345" authorities="ROLE_USER" />
            </user-service>
        </authentication-provider>
    </authentication-manager>

</beans:beans>
Run Code Online (Sandbox Code Playgroud)


根据Spring Security 3.2 API文档 ,不推荐使用setFilterProcessesUrl,而应使用setRequiresAuthenticationRequestMatcher(RequestMatcher).如何更改此基本XML配置,因此它不使用已弃用的方法?我正在使用带有Spring Tool Suite插件的Eclipse Kepler.

更新:

如果我删除<http auto-config="true">并添加<form-login />到http元素

<http>
    <intercept-url pattern="/myurl*" access="ROLE_USER" />
    <form-login />
</http>
Run Code Online (Sandbox Code Playgroud)

我也得到"方法'setFilterProcessesUrl'被标记为已弃用"警告,如果我添加,<logout />我第二次得到相同的警告.在另一方面,如果我更换<form-login />,并<logout /><http-basic />警告消失.

java eclipse spring spring-security spring-tool-suite

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

使用CSS隐藏内联div

我有一个内联div,我需要默认隐藏,然后使用jQuery show()hide()函数.

我试过这个,但它不起作用:

div.mydiv { display: inline none; }
Run Code Online (Sandbox Code Playgroud)

如果我删除none并只使用jQuery的hide()功能,它的工作原理.但是这样,在加载页面并执行JavaScript代码之前,元素不会被隐藏.

编辑 我里面有其他块元素div,所以我无法使用span.

html css

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

如何从java.net下载OpenJDK 8源代码

我需要从我的项目的Java 8的sun。*软件包中访问某些类的源代码。我在https://download.java.net/openjdk/jdk8/上找到它,但该链接适用于OpenJDK 8u0。我还从Googling 找到了指向8u40的链接(http://download.java.net/openjdk/jdk8u40/ri/openjdk-8u40-src-b25-10_feb_2015.zip),但是我找不到Java上的任何页面。引用它的网。如何从java.net或至少比8u40更新的东西中找到指向最新稳定的OpenJDK 8版本(8u192)源代码的链接?

请注意以下事项:

  1. 我特别想要OpenJDK 8的源代码,因为Oracle JDK源代码不包含我需要的sun。*软件包。
  2. 我知道Java 8的公共更新将在本月发布的8u202之后停止。因为我只需要参考源代码,所以在我的情况下这无关紧要。
  3. 我希望直接从Oracle(来自java.net)获得OpenJDK,而不是像Adopt或Azul这样的第三方供应商。
  4. 这个问题不是“要求我们推荐或找到书籍,工具,软件库,教程或其他非现场资源的问题”,因为我不要求任何建议或意见。我要的是一个非常具体的东西的源代码,因为OpenJDK是一个开源项目,因此应该公开可用。

java

0
推荐指数
1
解决办法
4442
查看次数