ホームページ  >  記事  >  Java  >  Spring Boot を使用して SQL の実行ステータスを監視する方法

Spring Boot を使用して SQL の実行ステータスを監視する方法

PHPz
PHPz転載
2023-05-11 17:13:061415ブラウズ

1. 準備作業

まず、次のように Spring Boot プロジェクトを作成し、MyBatis などを導入します。 「MyBatis ドライバーと MySQL ドライバーを見て、簡単なテスト ケースを作成する」を選択します。

最初にデータベースに接続します: Spring Boot を使用して SQL の実行ステータスを監視する方法

spring.datasource.username=root
spring.datasource.password=123
spring.datasource.url=jdbc:mysql:///test05?serverTimezone=Asia/Shanghai

User エンティティ クラスを作成し、次のように単純なクエリ ケースを作成します:

public class User {
    private Integer id;
    private String username;
    private String address;
    private String password;
    private String email;
    //省略 getter/setter
}
@Mapper
public interface UserMapper {
    List<User> getUserByUsername(String username);
}
@Service
public class UserService {
    @Autowired
    UserMapper userMapper;
    public List<User> getUserByUsername(String username){
        return userMapper.getUserByUsername(username);
    }
}
@RestController
public class UserController {
    @Autowired
    UserService userService;

    @GetMapping("/user")
    public List<User> getUser(String username) {
        return userService.getUserByUsername(username);
    }
}

UserMapper.xml は次のとおりです:

<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.javaboy.druid_monitor.mapper.UserMapper">
    <select id="getUserByUsername" resultType="org.javaboy.druid_monitor.model.User">
        select * from user where username=#{username}
    </select>
</mapper>
非常に単純なテストであり、言うことはありません。

この環境は自由に構築できます。すでに永続化のケースがある場合は、2 番目のセクションに進んで Druid を紹介してください。 このプロジェクトで使用されるデフォルトのデータベース接続プールは、Spring Boot のデフォルトのデータベース接続プールである HikariDataSource です。実際、これは悪くありません。

2. Druid の紹介

次に Druid を紹介します:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.8</version>
</dependency>

注:

Spring Boot によって導入される Druid は上記のドルイドです。将来的に監視できるように設定しておくとさらに便利です。

次に、application.properties で WebStatFilter を構成します。WebStatFilter は、Web-jdbc 関連の監視データを収集するために使用されます:

# 启用 WebStatFilter
spring.datasource.druid.web-stat-filter.enabled=true
# 配置拦截规则
spring.datasource.druid.web-stat-filter.url-pattern=/*
# 排除一些不必要的 url,这些 URL 不会涉及到 SQL 查询
spring.datasource.druid.web-stat-filter.exclusions=*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*
# 开启 session 统计功能
spring.datasource.druid.web-stat-filter.session-stat-enable=true
# 缺省 sessionStatMaxCount 是 1000 个,我们可以按需要进行配置
spring.datasource.druid.web-stat-filter.session-stat-max-count=1000
# 配置 principalSessionName,使得 druid 能够知道当前的 session 的用户是谁
# 根据需要,这个参数的值是 user 信息保存在 session 中的 sessionName
#spring.datasource.druid.web-stat-filter.principal-session-name=
# 下面这个配置的作用和上面配置的作用类似,这个是通过 Cookie 来识别用户
#spring.datasource.druid.web-stat-filter.principal-cookie-name=
# 开启 profile 后就能够监控单个 URL 地址调用列表
#spring.datasource.druid.web-stat-filter.profile-enable=

最初の 5 つだけを構成する必要がありますが、最後の 3 つは必要ありません構成、各構成の意味は、Songe によるコードにリストされています。

次に、次のように StatViewServlet の構成を開きます。

# 启用内置的监控页面
spring.datasource.druid.stat-view-servlet.enabled=true
# 内置监控页面的地址
spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
# 开启 Reset All 功能
spring.datasource.druid.stat-view-servlet.reset-enable=true
# 设置登录用户名
spring.datasource.druid.stat-view-servlet.login-username=javaboy
# 设置登录密码
spring.datasource.druid.stat-view-servlet.login-password=123
# 白名单(如果allow没有配置或者为空,则允许所有访问)
spring.datasource.druid.stat-view-servlet.allow=127.0.0.1
# 黑名单(deny 优先于 allow,如果在 deny 列表中,就算在 allow 列表中,也会被拒绝)
spring.datasource.druid.stat-view-servlet.deny=

ページ アドレスを構成し、ブラック リストとホワイト リストを構成します。

なお、reset-enable 属性を false に設定してもリセットボタンが表示され、ボタンをクリックしただけではリセットされません。

わかりました、以上です。

3. テストさて、次にテスト用の Spring Boot プロジェクトを開始します。

Spring Boot プロジェクトが正常に開始されたら、まず次のアドレスにアクセスします: http://localhost:8080/druid/login.html

この時点で、ログイン認証ページ、次のように:

先ほど設定したユーザー名/パスワード (javaboy/123) を入力してログインします。ログインに成功すると、次のページ:

Spring Boot を使用して SQL の実行ステータスを監視する方法

タイトルバーからわかるように、データソース、SQL監視、SQLファイアウォールなどの機能がすべて利用可能です。

次に、

http://localhost:8080/user?username=aaaSpring Boot を使用して SQL の実行ステータスを監視する方法 アドレスにアクセスして SQL を実行します。実行が完了したら、SQL 監視を確認します。

ご覧のとおり、現時点では SQL 実行の監視記録が存在します。 他の監視データも見られるので、いちいち記載しません。ここに表示されているデータが直感的ではないと感じ、独自の HTML ページを描画したい場合は、最後にある JSON API をクリックすると、各監視項目の JSON アドレスが表示されます。 JSON を使用して表示します。

4. 広告に移動Spring Boot を使用して SQL の実行ステータスを監視する方法

この監視ページを直接使用したい場合は、以下に示すように、Alibaba の広告が表示されます。企業がそれを使用している場合は、特に厄介です。

##この広告を削除することもできますが、これは簡単です。

まず、分析の結果、広告は

druid-1.2.8.jar!/support/http/resources/ にある common.js というファイルから構成されていることがわかりました。 js/ common.js

ここで、common.js ファイルには次の行が含まれています:

init : function() {
 this.buildFooter();
 druid.lang.init();
},
buildFooter : function() {
 var html =&#39;&#39;;
 $(document.body).append(html);
},
Spring Boot を使用して SQL の実行ステータスを監視する方法ロジックはおそらく上記のとおりで、buildFooter メソッドはページの最後に広告を構築する役割を果たします。 buildFooter メソッドの呼び出しは init メソッド内で完了します。

広告を削除したい場合は、buildFooter メソッドを呼び出さないでください。

したがって、広告を削除するという私たちのアイデアも非常にシンプルです。フィルターを作成し、common.js へのリクエストをインターセプトし、次のように少し変更を加えます: <pre class="brush:java;">@WebFilter(urlPatterns = &quot;/druid/js/common.js&quot;) public class RemoveAdFilter implements Filter { @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { String text = Utils.readFromResource(&quot;support/http/resources/js/common.js&quot;); text = text.replace(&quot;this.buildFooter();&quot;, &quot;&quot;); servletResponse.getWriter().write(text); } }</pre>As youご覧のとおり、このフィルターは

/druid/js/common.js

リクエストをインターセプトします。インターセプトした後、ファイル内の common.js ファイルを自分で読み取って、手動で

this を置き換えます。 .buildFooter();

この文だけで十分なので、最後にファイルを書き出すだけです。

もちろん、次のようにスタートアップ クラスで Filter をスキャンすることを忘れないでください:

<pre class="brush:java;">@SpringBootApplication @ServletComponentScan(&quot;org.javaboy.druid_monitor.filter&quot;) public class DruidMonitorApplication { public static void main(String[] args) { SpringApplication.run(DruidMonitorApplication.class, args); } }</pre>

以上がSpring Boot を使用して SQL の実行ステータスを監視する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。