当我将Spring Boot与shiro一起使用时,Spring Boot Actuator不会发布jvm指标

时间:2018-10-23 07:08:01

标签: java spring spring-boot shiro spring-boot-actuator

我将Spring Boot与Shiro一起使用,但是我启动Application并导航到/ actuator / metrics会显示可用仪表名称的列表:

{
    names: [
        "http.server.requests",
        "jdbc.connections.max",
        "jdbc.connections.min"
    ]
}

只有3个物品!

然后,我屏蔽shiro config:

//@Configuration
public class ShiroConfig {
      ...
}

我再次启动应用程序,我得到了全部:

{
names: [
"jvm.memory.max",
"process.files.max",
"jvm.gc.memory.promoted",
"tomcat.cache.hit",
"system.load.average.1m",
"tomcat.cache.access",
"jvm.memory.used",
"jvm.gc.max.data.size",
"jdbc.connections.max",
"jdbc.connections.min",
"jvm.gc.pause",
"jvm.memory.committed",
"system.cpu.count",
"logback.events",
"tomcat.global.sent",
"jvm.buffer.memory.used",
"tomcat.sessions.created",
"jvm.threads.daemon",
"system.cpu.usage",
"jvm.gc.memory.allocated",
"tomcat.global.request.max",
"tomcat.global.request",
"tomcat.sessions.expired",
"jvm.threads.live",
"jvm.threads.peak",
"tomcat.global.received",
"process.uptime",
"tomcat.sessions.rejected",
"process.cpu.usage",
"tomcat.threads.config.max",
"jvm.classes.loaded",
"jvm.classes.unloaded",
"tomcat.global.error",
"tomcat.sessions.active.current",
"tomcat.sessions.alive.max",
"jvm.gc.live.data.size",
"tomcat.servlet.request.max",
"tomcat.threads.current",
"tomcat.servlet.request",
"process.files.open",
"jvm.buffer.count",
"jvm.buffer.total.capacity",
"tomcat.sessions.active.max",
"tomcat.threads.busy",
"process.start.time",
"tomcat.servlet.error"
]
}

我想同时使用Actuator和Shiro。 感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

如我所料,这个问题是由bean的加载顺序引起的。

我在项目中使用了Shiro。

Shiro的验证方法使用MyBatis从数据库中读取数据。

我在MyBatis的Mapper文件中使用了@Autowired,这导致与Actuator指标相关的bean无法由SpringBoot组装(我不知道具体原因是什么。)

因此,我禁用了通过手动组装自动映射器文件的组装

代码如下:

StoreMapper userMapper = (UserMapper) SpringContextUtil.getBean("userMapper");
UserModel userModel = userMapper.findUserByName(name);

然后

import xml.etree.ElementTree as ET
tree = ET.parse('text.xml')
root = tree.getroot()

for elem in root:
    for movies in elem.find('decade'):
        print(movies.get('title'))

该问题暂时可以解决。这只是权宜之计,但目前我没有更好的办法。