今日模块截图:
1、入口类 Application
/**
*程序入口
*/
@SpringBootApplication
@EnableEurekaClient
public class Application {
public static void main(String[] args){
SpringApplication.run(Application.class,args);
}
}
(1) @SpringBootApplication -----核心注解
组合注解,相当于以下三个注解的作用:@Configuration、@EnableAutoConfiguration、@ComponentScan
@Configuration 标识这个类可以使用Spring IoC容器作为bean定义的来源。
@EnableAutoConfiguration 让SpringBoot根据路径的jar包依赖为当前项目进行自动配置
@ComponentScan 会自动扫描指定包下的全部标有@Component的类,并注册成bean,当然包括@Component下的子注解 ===============@Service,@Repository,@Controller。
(2)EnableEurekaClient
2、文件夹bean下的 FaultStatData
/*
* @Data 注解在类上;提供类所有属性的
* getting 和 setting 方法,此外还提供了
* equals、canEqual、hashCode、toString 方法
*/
@Data
public class FaultStatData {
private String networklayer;
private String neName;
private String alarmId;
private Integer alarmSeverity;
}
3、文件夹configuration下的 RabbitConfiguration
// @Configuration标注在类上,相当于把该类作为spring的xml配置文件中的<beans>,作用为:配置spring容器(应用上下文)
@Configuration
public class RabbitConfiguration {
//@Value 读取属性文件
@Value("${fault.queue.name:aijud.fm_alarm}")
private String queueName;
@Value("${fault.queue.thread:10}")
private Integer threadNum;
//@Bean注解注册bean,同时可以指定初始化和销毁方法
@Bean
public Queue Queue() {
return new Queue(queueName);
}
@Bean
public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory(ConnectionFactory connectionFactory){
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
factory.setTaskExecutor(Executors.newFixedThreadPool(threadNum));
factory.setConnectionFactory(connectionFactory);
return factory;
}
}
4、entity目录下的 AlarmSceneEntity 和FaultEntity(省)
@Data
// @Entity 对实体注释。任何Hibernate映射对象都要有这个注释
@Entity
// @Table 声明此对象映射到数据库的数据表,通过它可以为实体指定表(talbe),目录(Catalog)和schema的名字
@Table(name = "FM_ALARM_SCENE")
public class AlarmSceneEntity implements Serializable {
// @Id声明此属性为主键。
@Id
@GenericGenerator(name = "uuid",strategy = "uuid")
// @GeneratedValue指定主键的生成策略
@GeneratedValue(generator = "uuid")
String id = UUID.randomUUID().toString();
String networklayer;
//注释的是另一个表指向本表的外键。
@JoinColumn(name = "AlarmId")
//多对一关联
@ManyToOne
private FaultEntity realtimeFaultEntity;
public AlarmSceneEntity(){
}
public AlarmSceneEntity(String networklayer,FaultEntity realtimeFaultEntity){
this.networklayer = networklayer;
this.realtimeFaultEntity = realtimeFaultEntity;
}
}
5、repository中的接口和类
public interface IFaultRepository extends JpaRepository<FaultEntity,String> {
// @Modifying修饰@Query中的 JPQL(持久化查询语句),以通知SpringData,这是一个修改删除操作。
@Modifying
@Query("delete from FaultEntity where ClearId = :clearId")
//事务注解方式
@Transactional
void deleteByClearId(String clearId);
}
//日志打印,省去了 private final Logger logger = LoggerFactory.getLogger(XXX.class);
@Slf4j
//对应存储层Bean,它用于将数据访问层 (DAO 层 ) 的类标识为 Spring Bean。
@Repository
public class FaultStatisticRepository {
//spring可以自动帮你把bean里面引用的对象的setter/getter方法省略,它会自动帮你set/get。
@Autowired
private JdbcTemplate jdbcTemplate;
public List<FaultStatData> findFaultStatDatas(){
try {
String sql = "SELECT NETWORKLAYER, NE_NAME, ALARM_ID, ALARM_SEVERITY FROM FM_ALARM";
log.info("findNetworklayerFaults: sql = {}",sql);
return jdbcTemplate.query(sql,new FaultStatDataRowMapper());
} catch (Exception e) {
log.error("findNetworklayerFaults error: {}", e.getMessage());
e.printStackTrace();
}
return null;
}
}
6、restcontroller
// @RestController = @Controller + @Repository ,加了该注解后就无法返回jsp页面了,返回的内容就是return中的内容,配置的
// 视图解析器不起作用
@RestController
@RequestMapping("/api/fault/statistic")
@Slf4j
public class FaultStatisticRestController {
@Autowired
private IFaultStatisticService faultStatisticService;
@Autowired
private FaultStatisticRepository faultStatisticRepository;
@RequestMapping(value = "/update")
public String update() {
faultStatisticService.updateCount();
return "success";
}
@RequestMapping(value = "/device/ids")
public Map<String, Map<String, Integer>> findDeviceIds() {
return faultStatisticRepository.findDeviceIds();
}
}
7、service
@Service:服务层组件,用于标注业务层组件,表示定义一个bean,自动根据bean的类名实例化一个首写字母为小写的bean
@Qualifier:(该注解后面括号会有特定的实现类名字)表明了哪个实现类才是我们所需要的,绑定了某个实现类,避免了 一个接口被多个类实现的尴尬境地
@Component: 泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
@PostConstruct: 用于在依赖关系注入完成之后需要执行的方法上,以执行任何初始化