执行建表语句:
CREATE TABLE `t_user`
(
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
插入几条数据:
insert into `t_user`(`name`) values ('张三'),('李四'),('王五');
2 Spring Data JDBC访问Mysql
创建一个Spring Boot工程,集成Spring Data JDBC。可以直接使用资源文件中提供的skywalking_mysql.jar 。
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.1.10.RELEASE
com.itcast
skywalking_mysql
0.0.1-SNAPSHOT
skywalking_mysql
Demo project for Spring Boot
1.8
org.springframework.boot
spring-boot-starter-data-jdbc
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
mysql
mysql-connector-java
8.0.17
org.springframework.boot
spring-boot-maven-plugin
注意:
引入了 spring-boot-starter-data-jdbc ,由于使用了8.X的mysql版本,所以驱动版本固定为8.0.17。
pojo类:
package com.itcast.skywalking_mysql.pojo;
import org.springframework.data.annotation.Id;
import org.springframework.data.relational.core.mapping.Table;
@Table("t_user")
public class User {
@Id
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
注意:
添加Table注解,修改表明为t_user。
dao接口:
package com.itcast.skywalking_mysql.dao;
import com.itcast.skywalking_mysql.pojo.User;
import org.springframework.data.repository.CrudRepository;
public interface UserRepository extends CrudRepository {
}
controller:
package com.itcast.skywalking_mysql.controller;
import com.itcast.skywalking_mysql.dao.UserRepository;
import com.itcast.skywalking_mysql.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
@RestController
public class MysqlController {
@Autowired
private UserRepository userRepository;
@GetMapping("/users")
public List findAll(){
List result = new ArrayList<>();
userRepository.findAll().forEach((user) -> {
result.add(user);
});
return result;
}
}
注意:
由于Spring Data JDBC的findAll方法返回的是一个迭代器,所以需要遍历迭代器将数据进行返回。
启动类:
package com.itcast.skywalking_mysql;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SkywalkingMysqlApplication {
public static void main(String[] args) {
SpringApplication.run(SkywalkingMysqlApplication.class, args);
}
}
application.properties:
spring.datasource.url=jdbc:mysql://192.168.222.131:3306/skywalking
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=123456
server.port=8087
3 部署方式
3.1 将 skywalking_mysql.jar 上传至 /usr/local/skywalking 目录下。
3.2 首先我们复制agent,防止使用的冲突。
cd /usr/local/skywalking/apache-skywalking-apm-bin/
cp -r agent agent_mysql
vi agent_mysql/config/agent.config
修改agent_mysql配置中的应用名为:
# The service name in UI
agent.service_name=${SW_AGENT_NAME:skywalking_mysql}
3.3 启动skywalking_mysql应用,等待启动成功。
#切换到目录下
cd /usr/local/skywalking
#启动spring boot
java -javaagent:/usr/local/skywalking/apache-skywalking-apm-bin/agent_mysql/skywalking-agent.jar -jar skywalking_mysql.jar &
3.4 调用接口,接口地址为:http://虚拟机IP地址:8087/users
3.5 此时如果页面显示
那么mysql的调用就成功了。
3.6 打开skywalking查看mysql调用的监控情况。
服务仪表盘:
数据库仪表盘:
点击数据库仪表盘可以看到详细的数据库响应时长、吞吐量、SLA等数据。
拓扑图:
该图中已经表示出了一个调用的链路关系:
User(浏览器) ----> skywalking_mysql ----> localhost:33306
并且在服务的上方标识出了每个服务代表的内容,skywalking_mysql是SpringMvc的服务,而
192.168.222.131:3306是mysql的服务。
追踪:
追踪图中显示本次调用耗时5ms,其中spring MVC接口耗时4ms,那么另外的1ms是调用Mysql的耗时。
点击mysql的调用,可以看到详细的sql语句。
这样可以很好的定位问题产生的原因,特别是在某些sql语句执行慢的场景下。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)