0

DBから列名を取得するクエリがあります。これらの列名は、リクエストまたはセッションごとに変更されることはありません。したがって、各リクエストで無駄なクエリを実行しないようにするために、アプリケーションがデプロイされたときにこのクエリを1回実行し、アプリケーションList<String>のライフサイクルの残りの期間(再度デプロイされるまで)結果を保持したいと思います。

List<String>サービスレイヤーでファイナルを使用できるようにするには、どうすればこれを実現できますか?

デプロイ時にクエリを実行するのではなく、これを行うためのより良い方法がある場合は、別の方法を提案してください。

現在、私はこれを持っています:

public List<String> fetchColNames (String tableName) {
    String query = "SELECT Upper(column_name) FROM information_schema.columns WHERE table_name = ?";
        List<String> cols = getJdbcTemplate().query(query, new Object[] {tableName}, new RowMapper<String>() {
           public String mapRow(ResultSet rs, int rowNum) throws SQLException {
               return rs.getString(1);
           } 
        });
    return cols;
} 
4

2 に答える 2

1

メソッドをCachableにすることができます:

@Component
public class ColumnFetcher {
    @Cachable("columnNames")
    public List<String> fetchColNames (String tableName) {
        String query = "SELECT Upper(column_name) FROM information_schema.columns WHERE table_name = ?";
            List<String> cols = getJdbcTemplate().query(query, new Object[] {tableName}, new RowMapper<String>() {
               public String mapRow(ResultSet rs, int rowNum) throws SQLException {
                   return rs.getString(1);
               } 
            });
        return cols;
    } 
}

もちろん、キャッシュアノテーションも有効にする必要があります。

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:cache="http://www.springframework.org/schema/cache"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd">
    <cache:annotation-driven />
</beans>
于 2012-11-13T16:49:28.747 に答える
0

postconstructBeanのメソッドでアノテーションを使用できますconfigurable。これは、アプリケーションがデプロイされたときに実行されます。

于 2012-11-14T09:20:39.510 に答える