数据库调用结果在视图中需要很长时间才能加载

时间:2016-11-14 11:49:25

标签: java database spring spring-mvc

@RequestMapping("/regressionTest")
    public String home(Model model, @ModelAttribute CleanupTitles cleanupTitles) {
        applicationToEnvStatus = MappingUtil
                .getApplicationToEnvStatusMapping(databaseOperation);

        model.addAttribute("parameters", new Parameters());
        model.addAttribute("cleanupTitle", cleanupTitles);

        cleanupTitles.setTitles(databaseOperation.getTitle());

        return "home";
    }

MappingUtil类

public class MappingUtil {

    private enum Environment {
        dev, stage, prod
    }

    private static Map<String, String> applicationToStatus;
    private static Map<String, List<String>> applicationToEnvStatus;

    public static Map<String,List<String>> getApplicationToEnvStatusMapping(
            DatabaseOperation databaseOperation) {

        applicationToStatus = new HashMap<String, String>();
        applicationToEnvStatus = new HashMap<String, List<String>>();

        for (Environment e : Environment.values()) {
            System.out.println(e.toString());

            applicationToStatus = databaseOperation
                    .getApplicationToEnvMapping(e.toString());

            for (Map.Entry<String, String> entry : applicationToStatus
                    .entrySet()) {

                List<String> li = new ArrayList<String>();
                li.add(e.toString());
                li.add(entry.getValue());

                applicationToEnvStatus.put(entry.getKey(), li);

            }

            //System.out.println(e.toString() + "  " + applicationToStatus);
        }

        System.out.println(applicationToEnvStatus);

        return applicationToEnvStatus;

    }

数据库通话

public Map<String, String> getApplicationToEnvMapping(String envName) {

        String sqlQuery = "select application_name,is_completed from (select application_name,is_completed from rtf_run_status where env='"
                + envName + "' order by date_created desc) where rownum<=3";


        Map<String, String> applicationToStatus = new HashMap<String, String>();

        jdbcTemplate.query(sqlQuery, new ResultSetExtractor<Map>() {

            @Override
            public Map extractData(ResultSet rs) throws SQLException,
                    DataAccessException {
                while (rs.next()) {
                    applicationToStatus.put(rs.getString("application_name"),
                            rs.getString("is_completed"));
                }
                return applicationToStatus;
            }

        });

        return applicationToStatus;

    }

控制器正在进行2个db调用: a) MappingUtil.getApplicationToEnvStatus() b) cleanupTitles.setTitles()。这导致视图需要花费大量时间来加载。每个查询返回的结果集大约为4-5。

以更快的响应时间加载视图的最佳方法是什么?我应该在新线程中执行db调用还是有更好的方法吗?

0 个答案:

没有答案