Spring Boot应用启动成功,但遭遇JMX服务URL获取错误问题咨询
Spring Boot应用启动成功但报JMX服务URL获取错误
我的Spring Boot应用启动后运行无明显异常,但收到错误提示:Failed to retrieve application JMX service URL(无法获取应用JMX服务URL)。
问题原因与解决方案
这个错误通常是JMX服务初始化时机问题或自动探测失败导致的,不影响核心业务,但可通过以下方式消除:
- 禁用JMX自动配置
如果不需要JMX监控功能,直接在application.properties中添加配置关闭:
spring.jmx.enabled=false
- 显式指定JMX服务参数
若需保留JMX,手动配置服务端口与标识,避免自动探测失败:
spring.jmx.default-domain=your-app-domain com.sun.management.jmxremote.port=9090 com.sun.management.jmxremote.rmi.port=9090 com.sun.management.jmxremote.authenticate=false com.sun.management.jmxremote.ssl=false
将your-app-domain替换为你的应用标识,端口可根据需求自定义。
- 延迟JMX相关操作
通过监听ApplicationReadyEvent事件,确保JMX服务完全初始化后再执行相关操作,避免启动阶段的探测失败。
原始启动日志
HHH000204: Processing PersistenceUnitInfo [name: default] 2023-11-21T11:22:53.545+05:30 INFO 8960 --- [ main] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.2.13.Final 2023-11-21T11:22:53.547+05:30 INFO 8960 --- [ main] org.hibernate.cfg.Environment : HHH000406: Using bytecode reflection optimizer 2023-11-21T11:22:53.748+05:30 INFO 8960 --- [ main] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer 2023-11-21T11:22:53.769+05:30 INFO 8960 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... 2023-11-21T11:22:53.880+05:30 INFO 8960 --- [ main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@1d77746b 2023-11-21T11:22:53.882+05:30 INFO 8960 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. 2023-11-21T11:22:53.915+05:30 WARN 8960 --- [ main] org.hibernate.orm.deprecation : HHH90000025: MySQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) 2023-11-21T11:22:54.143+05:30 INFO 8960 --- [ main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) 2023-11-21T11:22:54.146+05:30 INFO 8960 --- [ main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' 2023-11-21T11:22:54.208+05:30 WARN 8960 --- [ 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 2023-11-21T11:22:54.506+05:30 INFO 8960 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2023-11-21T11:22:54.512+05:30 INFO 8960 --- [ main] com.example.groups.GroupsApplication : Started GroupsApplication in 2.466 seconds (process running for 3.059)
配置文件(application.properties)
spring.datasource.url=jdbc:mysql://localhost:3306/newdb?useSSL=false spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect
User实体类(user.java)
package entity; import jakarta.persistence.*; import lombok.Data; @Entity @Data @Table(name="user") public class user { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE) @Column(name = "ID",nullable = false,unique = true) private long id; @Column(name = "Email",nullable = false) private String mailid; @Column(name = "Full Name",nullable = false) private String fullname; @Column(name = "Password",nullable = false) private String password; public user(long id, String mailid, String fullname, String password) { this.id = id; this.mailid = mailid; this.fullname = fullname; this.password = password; } public user() { } public long getId() { return id; } public void setId(long id) { this.id = id; } public String getMailid() { return mailid; } public void setMailid(String mailid) { this.mailid = mailid; } public String getFullname() { return fullname; } public void setFullname(String fullname) { this.fullname = fullname; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
内容的提问来源于stack exchange,提问作者Rohit Boni
相关产品推荐
相关产品推荐

