You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Micronaut:如何在Thymeleaf视图层判断运行环境加载跟踪工具

在Micronaut + Thymeleaf中判断运行环境并仅在生产环境加载跟踪工具

我来给你一步步拆解这个需求,其实实现起来很清晰,核心就是把Micronaut的运行环境信息传递到Thymeleaf视图层,再通过条件判断控制跟踪脚本的加载,具体操作如下:

第一步:将环境信息全局传递到视图

为了让所有Thymeleaf模板都能便捷访问环境信息,推荐创建一个全局的Model处理器,不用在每个控制器里重复传递数据:

import io.micronaut.context.Environment;
import io.micronaut.http.HttpRequest;
import io.micronaut.http.server.ModelProcessor;
import io.micronaut.views.ModelAndView;
import jakarta.inject.Singleton;
import java.util.Map;

@Singleton
public class EnvironmentModelProcessor implements ModelProcessor<HttpRequest<?>> {

    private final Environment environment;

    // 注入Micronaut的环境实例
    public EnvironmentModelProcessor(Environment environment) {
        this.environment = environment;
    }

    @Override
    public void process(HttpRequest<?> request, ModelAndView<?> modelAndView) {
        if (modelAndView != null && modelAndView.getModel() != null) {
            Map<String, Object> model = modelAndView.getModel();
            // 直接传递"是否为生产环境"的布尔值,简化视图判断逻辑
            model.put("isProd", environment.activeNames().contains("prod"));
            // 也可以把整个Environment对象传入,方便后续扩展其他环境判断
            // model.put("environment", environment);
        }
    }
}

这个处理器会自动把isProd变量注入到所有视图的Model中,不用手动在每个控制器里添加。

第二步:在Thymeleaf模板中做条件加载

拿到isProd变量后,就可以用Thymeleaf的条件表达式控制Google Analytics脚本的加载了:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <!-- 页面其他头部内容 -->
    
    <!-- 仅在生产环境加载跟踪脚本 -->
    <th:block th:if="${isProd}">
        <script async src="https://www.googletagmanager.com/gtag/js?id=你的GA_ID"></script>
        <script>
            window.dataLayer = window.dataLayer || [];
            function gtag(){dataLayer.push(arguments);}
            gtag('js', new Date());
            gtag('config', '你的GA_ID');
        </script>
    </th:block>
</head>
<body>
    <!-- 页面主体内容 -->
</body>
</html>

如果之前传递的是完整的environment对象,判断逻辑可以写成:

<th:block th:if="${environment.activeNames().contains('prod')}">
    <!-- GA脚本 -->
</th:block>

验证你的启动命令

你当前使用的启动命令是完全正确的:

java -Dmicronaut.environments=prod -jar mywebsite.jar

这个参数会激活prod环境,environment.activeNames()列表中会包含prod,从而触发视图层的条件加载逻辑。

内容的提问来源于stack exchange,提问作者user1117605

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:01:03