首页 > 解决方案 > 如何在spring boot ireport中从applicaiton.properties获取MySQL连接

问题描述

目前我正在使用此代码生成 ireport。但我需要直接从 application.properties 获取数据源,因为我不想再次使用用户名和密码进行 sql 连接。

        File file = ResourceUtils.getFile("classpath:report/collectorInvoice.jrxml");
        InputStream input = new FileInputStream(file);

        // Compile the Jasper report from .jrxml to .japser
        JasperReport jasperReport = JasperCompileManager.compileReport(input);

        conn = DriverManager.getConnection("jdbc:mysql://localhost/divron?createDatabaseIfNotExist=true&useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC","aha","123");

        // Get the parameter
        Map<String, Object> parameters = new HashMap<>();

        parameters.put("invoiceId",id);
        try (Connection connection = dataSource.getConnection()) {

            JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, conn);

            // Export the report to a PDF file
            JasperExportManager.exportReportToPdfFile(jasperPrint, "D://" +"collectorInvoice -"+ id + ".pdf");

        }
        return new ResponseEntity<Object>(null, HttpStatus.OK);

这是应该更改的代码。

        conn = DriverManager.getConnection("jdbc:mysql://localhost/divron?createDatabaseIfNotExist=true&useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC","aha","123");

所以请帮我从sql连接中获取全部数据,而无需再次使用sql连接的用户名和密码。

标签: javaspringjdbcdatasource

解决方案


如果 Spring Boot 已经创建了 DataSource,您可以在 Bean 中自动装配它(或使用其他注入方式)并使用来自 DataSource 的连接

@Autowired
DataSource dataSource;
....
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, dataSource.getConnection());

推荐阅读