Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 未能创建子事件循环/未能打开新选择器/打开的文件太多_Java_Spring Boot_Cassandra_Cassandra Driver - Fatal编程技术网

Java 未能创建子事件循环/未能打开新选择器/打开的文件太多

Java 未能创建子事件循环/未能打开新选择器/打开的文件太多,java,spring-boot,cassandra,cassandra-driver,Java,Spring Boot,Cassandra,Cassandra Driver,我遇到了一些错误,例如无法创建子事件循环/无法打开新选择器/有30个或更多并发请求时打开的文件太多…如何解决上述错误?我做错什么了吗?我使用的是Spring boot和Java cassandra驱动程序。下面是连接文件: } 下面是我在连接文件中使用的ConnectionBean文件: } 下面是初始化ConnectionBean变量的类: } 最后,下面是我用来查询cassandra数据的类: }如果对每个请求调用getConnection,则每次都创建一个新的群集实例 不鼓励这样做,因为在

我遇到了一些错误,例如无法创建子事件循环/无法打开新选择器/有30个或更多并发请求时打开的文件太多…如何解决上述错误?我做错什么了吗?我使用的是Spring boot和Java cassandra驱动程序。下面是连接文件:

}

下面是我在连接文件中使用的ConnectionBean文件:

}

下面是初始化ConnectionBean变量的类:

}

最后,下面是我用来查询cassandra数据的类:

}

如果对每个请求调用getConnection,则每次都创建一个新的群集实例

不鼓励这样做,因为在客户端和每个群集实例的C*节点之间创建了一个连接,并且为每个会话为每个C*节点创建了至少一个连接的连接池

如果在请求完成后不关闭集群实例,这些连接将保持打开状态。在多次请求之后,您将打开大量连接,操作系统中的文件描述符将用尽

要解决此问题,请仅创建一个集群和会话实例,并在请求之间重用它。该战略概述如下:

在每个应用程序生命周期中,每个物理群集使用一个群集实例 每个键空间最多使用一个会话,或者使用单个会话并在查询中明确指定键空间
寻求调试帮助的问题此代码为什么不起作用?必须包括所需的行为、特定的问题或错误以及在问题本身中重现这些问题所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:。否。这里关注的是Java Cassandra驱动程序给出了上述错误。如果有30个并发用户请求,它可以与15个并发用户一起正常工作。我猜您的数据库有一个连接限制。你需要增加。或者排队工作。如果您只有10名工作人员,我可以知道在哪里检查数据库连接限制吗?我还尝试了MaxQueueSize=4096和MaxRequestsPerConnection=32768的java cassandra驱动程序池选项……谢谢!!!可能是数据库本身。。。我不知道cassandra,但你可能会在谷歌上找到它,比如:cassandra设置连接限制
public class Connection {

public static Session getConnection() {

    final Cluster cluster = Cluster.builder().addContactPoint(ConnectionBean.getCASSANDRA_DB_IP())
            .withQueryOptions(new QueryOptions().setConsistencyLevel(ConsistencyLevel.LOCAL_ONE))
            .withCredentials(ConnectionBean.getCASSANDRA_USER(), ConnectionBean.getCASSANDRA_PASSWORD())
            .withPoolingOptions(poolingOptions)
            .build();
    final Session session = cluster.connect(ConnectionBean.getCASSANDRA_DB_NAME());
    return session;
}
public  class ConnectionBean {

public static   String CASSANDRA_DB_IP;
public static String CASSANDRA_DB_NAME;
public static  String CASSANDRA_USER;
public static String CASSANDRA_PASSWORD;

public ConnectionBean() {

}
public ConnectionBean(String CASSANDRA_DB_IP,String CASSANDRA_DB_NAME,String CASSANDRA_USER,String CASSANDRA_PASSWORD) {
this.CASSANDRA_DB_IP=CASSANDRA_DB_IP;
this.CASSANDRA_DB_NAME=CASSANDRA_DB_NAME;
this.CASSANDRA_USER=CASSANDRA_USER;
this.CASSANDRA_PASSWORD=CASSANDRA_PASSWORD;
}

public static String getCASSANDRA_DB_IP() {
    return CASSANDRA_DB_IP;
}
public static void setCASSANDRA_DB_IP(String cASSANDRA_DB_IP) {
    CASSANDRA_DB_IP = cASSANDRA_DB_IP;
}
public static String getCASSANDRA_DB_NAME() {
    return CASSANDRA_DB_NAME;
}
public static void setCASSANDRA_DB_NAME(String cASSANDRA_DB_NAME) {
    CASSANDRA_DB_NAME = cASSANDRA_DB_NAME;
}
public static String getCASSANDRA_USER() {
    return CASSANDRA_USER;
}
public static void setCASSANDRA_USER(String cASSANDRA_USER) {
    CASSANDRA_USER = cASSANDRA_USER;
}
public static String getCASSANDRA_PASSWORD() {
    return CASSANDRA_PASSWORD;
}
public static void setCASSANDRA_PASSWORD(String cASSANDRA_PASSWORD) {
    CASSANDRA_PASSWORD = cASSANDRA_PASSWORD;
}   
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
private static final String LOGIN_PROCESSING_URL = "/login";
private static final String LOGIN_FAILURE_URL = "/login?error";
private static final String LOGIN_URL = "/login";

@Autowired
private BCryptPasswordEncoder bCryptPasswordEncoder;

@Autowired
private DataSource dataSource;

@Value("${spring.queries.users-query}")
private String usersQuery;

@Value("${spring.queries.roles-query}")
private String rolesQuery;

@Value("${CASSANDRA_DB_IP}")
public String CASSANDRA_DB_IP;

@Value("${CASSANDRA_DB_NAME}")
public String CASSANDRA_DB_NAME;

@Value("${CASSANDRA_USER}")
public String CASSANDRA_USER;

@Value("${CASSANDRA_PASSWORD}")
public String CASSANDRA_PASSWORD;

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    ConnectionBean cb = new ConnectionBean(CASSANDRA_DB_IP, CASSANDRA_DB_NAME, CASSANDRA_USER, CASSANDRA_PASSWORD);

    auth.jdbcAuthentication().usersByUsernameQuery(usersQuery).authoritiesByUsernameQuery(rolesQuery)
            .dataSource(dataSource).passwordEncoder(bCryptPasswordEncoder);
}

@Override
protected void configure(HttpSecurity http) throws Exception {
    // Not using Spring CSRF here to be able to use plain HTML for the login page

    http.csrf().disable()

            // Register our CustomRequestCache, that saves unauthorized access attempts, so
            // the user is redirected after login.
            .requestCache().requestCache(new CustomRequestCache())

            // Restrict access to our application.
            .and().authorizeRequests()

            // Allow all flow internal requests.
            .requestMatchers(SecurityUtils::isFrameworkInternalRequest).permitAll()

            // Allow all requests by logged in users.
            .anyRequest().authenticated()

            // Configure the login page.
            .and().formLogin().loginPage(LOGIN_URL).permitAll().loginProcessingUrl(LOGIN_PROCESSING_URL)
            .failureUrl(LOGIN_FAILURE_URL)

            // Register the success handler that redirects users to the page they last tried
            // to access
            .successHandler(new SavedRequestAwareAuthenticationSuccessHandler())

            // Configure logout
            .and().logout().logoutSuccessUrl(LOGOUT_SUCCESS_URL);
}

/**
 * Allows access to static resources, bypassing Spring security.
 */
@Override
public void configure(WebSecurity web) throws Exception {
    web.ignoring().antMatchers(
            // Vaadin Flow static resources
            "/VAADIN/**",

            // the standard favicon URI
            "/favicon.ico",

            // web application manifest
            "/manifest.json", "/sw.js", "/offline-page.html",

            // icons and images
            "/icons/**", "/images/**",

            // (development mode) static resources
            "/frontend/**",

            // (development mode) webjars
            "/webjars/**",

            // (development mode) H2 debugging console
            "/h2-console/**",

            // (production mode) static resources
            "/frontend-es5/**", "/frontend-es6/**");
}
public class getData {
Session session;

public getData(){
    session = Connection.getConnection();
    getDataTable();
}

private void getDataTable() {
    try {
        String query = "SELECT * FROM tableName";
        ResultSet rs = session.execute(query);
        for (Row row : rs) {
            /*Do some stuff here using row*/
        }

    } catch (Exception e) {
        e.printStackTrace();
    }
}