I-Net Clear Report Engine

本文介绍了一个使用I-NetClearReport引擎创建报告并导出为PDF的例子。通过设置报告文件、数据库源和参数字段值,可以实现从数据库查询结果并生成报告。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

I-Net Clear Report Engine is an excellent tool which also can support standard HTML/CSS well. You can define rpt template by clear designer, and can create datasource to query result from database, pass parameter by java......


import java.io.FileOutputStream;

import com.inet.report.Datasource;
import com.inet.report.Engine;

/**
* @Class name: IClearTest.java
*
* Short description on the purpose of the program.
*
* @author: wangxiang
* @modified: 2011-11-30
*
*/

public class IClearTest {

private static boolean useStdout=false;
private static String reportFile = "file:D:/Report4.rpt";
/**
* @param args
*/
static void usage () {
System.err.println("Usage: ProgrammingTheEngine [--use-stdout]");
System.exit(1);
}

/**
* Checks if parameter values has been set.
* @param args first parameter is stdout, second parameter is report file URL
*/
static void getOpt (String[] args) {
for (int i = 0; i< args.length; i++) {
if (args[i].equals("--use-stdout")) {
useStdout = true;
System.err.println("writing PDF file to stdout");
}
else if (args[i].equals("--report")) {
reportFile = args[++i];
} else {
usage();
}
}
}

/**
* Executes a report and exports it to PDF.
* @param args first parameter is stdout, second parameter is report file URL
*/
public static void main(String[] args) {
getOpt(args);

try {
// Create an engine -> pdf export
Engine engine = new Engine(Engine.EXPORT_PDF);

// Set the report file
engine.setReportFile(reportFile);

// At this point you can change the default values from the rpt file, e.g.:
// Change Data Source Configuration - Use another database at runtime as at design time
Datasource ds = engine.getDatabaseTables().getDatasource(0);
ds.setDataSourceConfigurationName( "ORCL" ); // name of the Data Source Configuration
ds.setUsername("userid"); // that should be used for creation of database connection
ds.setPassword("password"); // If the password is not saved in Data Source Configuration

// Set Parameter Field values
engine.setPrompt("htmlContent", "<table><tr><td>test</td></tr></table>");

// Start the report execution
engine.execute();

// Open the output file and save the data in a .pdf file or in standard out
java.io.OutputStream pdfFile;
if(useStdout) {
pdfFile = System.out;
} else {
pdfFile = new FileOutputStream("D:/cleartest.pdf");
}

// Request all report pages from the engine
for(int i=1;i<=engine.getPageCount();i++) {
pdfFile.write(engine.getPageData(i));
}
if(useStdout) {
pdfFile.flush();
} else {
pdfFile.close();
}
} catch (Throwable t ) {
t.printStackTrace();
}
System.exit(0);
}

}

at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) ~[tomcat-embed-core-9.0.31.jar!/:9.0.31] at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145) ~[na:na] at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909) ~[tomcat-embed-core-9.0.31.jar!/:9.0.31] at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262) ~[tomcat-embed-core-9.0.31.jar!/:9.0.31] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[tomcat-embed-core-9.0.31.jar!/:9.0.31] at org.apache.catalina.core.StandardService.startInternal(StandardService.java:421) ~[tomcat-embed-core-9.0.31.jar!/:9.0.31] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[tomcat-embed-core-9.0.31.jar!/:9.0.31] at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:930) ~[tomcat-embed-core-9.0.31.jar!/:9.0.31] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[tomcat-embed-core-9.0.31.jar!/:9.0.31] at org.apache.catalina.startup.Tomcat.start(Tomcat.java:467) ~[tomcat-embed-core-9.0.31.jar!/:9.0.31] at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:107) ~[spring-boot-2.2.5.RELEASE.jar!/:2.2.5.RELEASE] at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.<init>(TomcatWebServer.java:88) ~[spring-boot-2.2.5.RELEASE.jar!/:2.2.5.RELEASE] at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getTomcatWebServer(TomcatServletWebServerFactory.java:438) ~[spring-boot-2.2.5.RELEASE.jar!/:2.2.5.RELEASE] at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getWebServer(TomcatServletWebServerFactory.java:191) ~[spring-boot-2.2.5.RELEASE.jar!/:2.2.5.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:180) ~[spring-boot-2.2.5.RELEASE.jar!/:2.2.5.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:153) ~[spring-boot-2.2.5.RELEASE.jar!/:2.2.5.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:544) ~[spring-context-5.2.4.RELEASE.jar!/:5.2.4.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141) ~[spring-boot-2.2.5.RELEASE.jar!/:2.2.5.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747) ~[spring-boot-2.2.5.RELEASE.jar!/:2.2.5.RELEASE] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) ~[spring-boot-2.2.5.RELEASE.jar!/:2.2.5.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) ~[spring-boot-2.2.5.RELEASE.jar!/:2.2.5.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) ~[spring-boot-2.2.5.RELEASE.jar!/:2.2.5.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215) ~[spring-boot-2.2.5.RELEASE.jar!/:2.2.5.RELEASE] at com.cn.travel.TravelApplication.main(TravelApplication.java:16) ~[classes!/:0.0.1-SNAPSHOT] at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na] at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48) ~[travel-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] at org.springframework.boot.loader.Launcher.launch(Launcher.java:87) ~[travel-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] at org.springframework.boot.loader.Launcher.launch(Launcher.java:51) ~[travel-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:52) ~[travel-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] Caused by: java.lang.IllegalStateException: Not a file URL at org.springframework.boot.loader.jar.Handler.getRootJarFile(Handler.java:304) ~[travel-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] ... 58 common frames omitted 2025-07-10 04:43:26.009 INFO 26542 --- [ main] org.apache.jasper.servlet.TldScanner : At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time. 2025-07-10 04:43:26.012 INFO 26542 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2025-07-10 04:43:26.012 INFO 26542 --- [ main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1442 ms 2025-07-10 04:43:26.070 INFO 26542 --- [ main] c.a.d.s.b.a.DruidDataSourceAutoConfigure : Init DruidDataSource 2025-07-10 04:43:26.258 INFO 26542 --- [ main] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} inited 2025-07-10 04:43:26.368 INFO 26542 --- [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] 2025-07-10 04:43:26.468 INFO 26542 --- [ main] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.4.12.Final 2025-07-10 04:43:26.607 INFO 26542 --- [ main] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.0.Final} 2025-07-10 04:43:26.789 INFO 26542 --- [ main] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.MariaDB103Dialect 2025-07-10 04:43:26.819 WARN 26542 --- [ main] o.h.e.j.e.i.JdbcEnvironmentInitiator : HHH000341: Could not obtain connection metadata : Unknown column 'RESERVED' in 'WHERE' 2025-07-10 04:43:26.819 INFO 26542 --- [ main] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.MariaDB103Dialect 2025-07-10 04:43:26.986 INFO 26542 --- [ main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] 2025-07-10 04:43:26.990 INFO 26542 --- [ main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' 2025-07-10 04:43:27.624 WARN 26542 --- [ main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning MyBatisConfiguration.pageHelper() 2025-07-10 04:43:27.806 INFO 26542 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' 2025-07-10 04:43:27.887 INFO 26542 --- [ main] o.s.b.a.w.s.WelcomePageHandlerMapping : Adding welcome page template: index 2025-07-10 04:43:27.933 WARN 26542 --- [ main] org.thymeleaf.templatemode.TemplateMode : [THYMELEAF][main] Template Mode 'LEGACYHTML5' is deprecated. Using Template Mode 'HTML' instead. 2025-07-10 04:43:27.958 INFO 26542 --- [ main] t.m.m.autoconfigure.MapperCacheDisabler : Clear tk.mybatis.mapper.util.MsUtil CLASS_CACHE cache. 2025-07-10 04:43:27.959 INFO 26542 --- [ main] t.m.m.autoconfigure.MapperCacheDisabler : Clear tk.mybatis.mapper.genid.GenIdUtil CACHE cache. 2025-07-10 04:43:27.960 INFO 26542 --- [ main] t.m.m.autoconfigure.MapperCacheDisabler : Clear tk.mybatis.mapper.version.VersionUtil CACHE cache. 2025-07-10 04:43:27.960 INFO 26542 --- [ main] t.m.m.autoconfigure.MapperCacheDisabler : Clear EntityHelper entityTableMap cache. 2025-07-10 04:43:28.068 INFO 26542 --- [ main] o.apache.catalina.core.StandardService : Stopping service [Tomcat] 2025-07-10 04:43:28.090 INFO 26542 --- [ main] ConditionEvaluationReportLoggingListener : Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2025-07-10 04:43:28.092 ERROR 26542 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPLICATION FAILED TO START *************************** Description: Web server failed to start. Port 80 was already in use. Action: Identify and stop the process that's listening on port 80 or configure this application to listen on another port. 2025-07-10 04:43:28.094 INFO 26542 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applicationTaskExecutor' 2025-07-10 04:43:28.095 INFO 26542 --- [ main] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default' 2025-07-10 04:43:28.096 INFO 26542 --- [ main] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} closing ... 2025-07-10 04:43:28.101 INFO 26542 --- [ main] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} closed ┌──(kali㉿kali)-[/mnt/hgfs/shiyansucai] └─$ sudo systemctl status mariadb ● mariadb.service - MariaDB 11.8.2 database server Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; preset: disabled) Active: active (running) since Thu 2025-07-10 03:52:33 EDT; 51min ago Invocation: 0e8e759073774f3db4beb277c6a197b5 Docs: man:mariadbd(8) https://mariadb.com/kb/en/library/systemd/ Main PID: 1079 (mariadbd) Status: "Taking your SQL requests now..." Tasks: 11 (limit: 14518) Memory: 161M (peak: 162.7M, swap: 4K, swap peak: 4K) CPU: 2.785s CGroup: /system.slice/mariadb.service └─1079 /usr/sbin/mariadbd Jul 10 03:52:32 kali mariadbd[1079]: 2025-07-10 3:52:32 0 [Note] Plugin 'wsrep-provider' is disabled. Jul 10 03:52:32 kali mariadbd[1079]: 2025-07-10 3:52:32 0 [Note] Recovering after a crash using tc.log Jul 10 03:52:32 kali mariadbd[1079]: 2025-07-10 3:52:32 0 [Note] Starting table crash recovery... Jul 10 03:52:32 kali mariadbd[1079]: 2025-07-10 3:52:32 0 [Note] Crash table recovery finished. Jul 10 03:52:32 kali mariadbd[1079]: 2025-07-10 3:52:32 0 [Note] InnoDB: Buffer pool(s) load completed at 25> Jul 10 03:52:33 kali mariadbd[1079]: 2025-07-10 3:52:33 0 [Note] Server socket created on IP: '127.0.0.1'. Jul 10 03:52:33 kali mariadbd[1079]: 2025-07-10 3:52:33 0 [Note] mariadbd: Event Scheduler: Loaded 0 events Jul 10 03:52:33 kali mariadbd[1079]: 2025-07-10 3:52:33 0 [Note] /usr/sbin/mariadbd: ready for connections. Jul 10 03:52:33 kali mariadbd[1079]: Version: '11.8.2-MariaDB-1 from Debian' socket: '/run/mysqld/mysqld.soc> Jul 10 03:52:33 kali systemd[1]: Started mariadb.service - MariaDB 11.8.2 database server. ┌──(kali㉿kali)-[/mnt/hgfs/shiyansucai] └─$ mysql -u root -p123456 -h 127.0.0.1 travel_db -e "SELECT 1;" +---+ | 1 | +---+ | 1 | +---+ ┌──(kali㉿kali)-[/mnt/hgfs/shiyansucai] └─$ tail -f /mnt/hgfs/shiyansucai/logs/application.log tail: cannot open '/mnt/hgfs/shiyansucai
07-11
<think>好的,我现在需要帮助用户解决他们在Kali Linux上运行Spring Boot应用时遇到的问题。根据之前的对话历史,用户已经尝试过一些解决方案,但问题依然存在。现在用户的最新日志显示应用启动失败,因为端口80被占用,同时还有关于MariaDB的连接警告。 首先,我需要理清当前的问题。用户提到端口80被占用,这导致Web服务器无法启动。用户可能已经尝试了之前的建议,比如配置MariaDB和调整Hibernate方言,但现在遇到了新的问题。此外,日志中出现了“Unknown column 'RESERVED' in 'WHERE'”的警告,这可能与数据库兼容性有关。 接下来,我需要考虑用户可能的操作环境和背景。用户是在Kali Linux上运行应用,可能是在进行渗透测试或开发工作。他们可能对Linux系统有一定了解,但在Java或Spring Boot配置上可能需要更具体的指导。用户可能没有提到他们是否已经尝试更改端口号,或者是否检查了其他服务是否占用了端口80。 我需要分步骤解决这两个主要问题:端口占用和数据库连接警告。首先处理端口80被占用的问题,因为这是导致启动失败的直接原因。然后解决数据库相关的警告,确保应用能正常连接数据库。 关于端口占用,用户需要确认是否有其他服务(如Apache或Nginx)在运行,并终止这些进程或更改应用端口。对于数据库问题,用户已经使用了MariaDB的方言,但仍有警告,可能需要进一步检查数据库版本和配置,或者调整Hibernate的配置以避免访问不存在的列。 另外,用户尝试复制JAR到本地路径但可能未成功,或者仍有路径问题。需要确认文件路径是否正确,以及是否有权限问题。此外,日志中提到的TLD扫描警告虽然不影响启动,但可能影响性能,可以建议用户禁用相关扫描以减少干扰。 最后,用户可能需要验证所有步骤是否正确执行,包括配置文件的修改是否生效,服务重启后的状态是否正常。需要确保每一步都清晰明确,避免遗漏关键细节。</think>### **问题分析** 从最新日志可知,应用启动失败的核心原因是 **端口 80 被占用**,而数据库连接警告 `Unknown column 'RESERVED'` 是次要问题。以下是详细排查步骤: --- ### **1. 解决端口 80 被占用问题** #### **步骤 1:确认占用端口的进程** ```bash # 查看占用 80 端口的进程 sudo lsof -i :80 # 或使用 netstat sudo netstat -tulnp | grep :80 ``` #### **步骤 2:终止占用进程或修改应用端口** - **终止进程**(假设 PID 为 `1234`): ```bash sudo kill -9 1234 ``` - **修改应用端口**(推荐): 在 `application.properties` 中更改端口: ```properties server.port=8080 ``` #### **步骤 3:重新启动应用** ```bash java -jar ~/travel.jar ``` --- ### **2. 解决数据库警告 `Unknown column 'RESERVED'`** 此警告通常由以下原因导致: 1. **MariaDB 版本与 Hibernate 方言不匹配** 当前使用 `MariaDB103Dialect`,但数据库版本为 `11.8.2`,需升级方言版本: ```properties # 修改为 MariaDB 11.x 的方言 spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MariaDB11Dialect ``` 2. **数据库元数据查询异常** MariaDB 的系统表可能缺少某些字段,可通过忽略该警告或调整 Hibernate 配置解决: ```properties # 忽略元数据检查(临时方案) spring.jpa.hibernate.use-new-id-generator-mappings=false ``` --- ### **3. 优化 JAR 文件路径问题** 尽管应用已成功初始化数据库连接,但日志中仍提示 TLD 扫描异常。**将 JAR 文件移动到非挂载目录**: ```bash cp /mnt/hgfs/shiyansucai/travel-0.0.1-SNAPSHOT.jar ~/travel.jar java -jar ~/travel.jar ``` --- ### **4. 验证数据库连接** 确保 MariaDB 服务正常运行且配置正确: ```bash # 检查 MariaDB 状态 sudo systemctl status mariadb # 测试连接(确保用户名、密码、数据库名正确) mysql -u root -p -h 127.0.0.1 travel_db -e "SELECT 1;" ``` --- ### **5. 完整配置示例(MariaDB + Spring Boot)** ```properties # 数据库连接配置 spring.datasource.url=jdbc:mariadb://localhost:3306/travel_db?useSSL=false&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=org.mariadb.jdbc.Driver # Hibernate 配置 spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MariaDB11Dialect spring.jpa.hibernate.ddl-auto=update # 端口配置 server.port=8080 # 禁用 TLD 扫描(减少警告) server.tomcat.additional-tld-skip-patterns=*.jar ``` --- ### **6. 验证应用启动** 1. 修改配置后重新启动: ```bash java -jar ~/travel.jar ``` 2. 检查日志输出: - 成功启动应包含: ``` Tomcat started on port(s): 8080 (http) ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值