示例:在 Azure 中,我正在同一区域中部署多个资源组、托管磁盘、网络接口等。
我想声明一个“区域”原语(“常量”),所有这些资源都将引用它。其中哪一个遵循惯例?
a)变量.tf:
variable "region" {
type = string
default = "a-place"
}
Run Code Online (Sandbox Code Playgroud)
b) 当地人.tf
locals {
region = "a-place"
}
Run Code Online (Sandbox Code Playgroud)
我自然会选择声明为本地人。仅当我期望从环境变量、命令行获得(或被覆盖)一个值,或者我正在创建一个模块时,我才会使用变量。然而,我还没有在任何示例中看到 local 被用于“声明常量”,这使我认为存在使用范围非常有限的 local 的约定(例如,主要用于创建可与 和count结构一起使用的结构for_each)。
在有人将此标记为基于意见之前掩饰我的背部:我问的是公约是什么,而不是您认为公约应该是什么。
后续问题:如果此示例涵盖 IP 地址、资源名称前缀等而不是区域,答案是否会有所不同?(该公约是否只涵盖特定领域?)
前提:我选择这样做是因为我最终可能会有几千个模式,每个模式(除其他外)有一个包含几百万个条目的表。另一种选择是(除其他外)在一个模式中拥有一个包含数十亿条目的表。
详细说明这个问题的最佳方法是提供一个简单的例子。考虑以下:
用户.java
@Entity(name = "user")
public class User {
@Id
@GeneratedValue
@Column(name = "id")
private Long id;
@Column(name = "username")
private String username;
// getters and setters...
}
Run Code Online (Sandbox Code Playgroud)
UserDao.java
@Repository
public interface UserDao extends CrudRepository<User, Long> {}
Run Code Online (Sandbox Code Playgroud)
用户服务.java
public interface UserService {
User getUser(Long id);
}
Run Code Online (Sandbox Code Playgroud)
UserServiceBean.java
@Transactional
@Service
public class UserServiceBean implements UserService {
@Autowired
private UserDao dao;
@Override
public User getUser(Long id) {
return dao.findOne(id);
}
}
Run Code Online (Sandbox Code Playgroud)
用户控制器.java
@RestController
public class UserController {
@Autowired
private UserService userService; …Run Code Online (Sandbox Code Playgroud) 我将写一个例子只是为了降低复杂性:
人类.java
@Entity
@Table(name = "human")
@DynamicInsert(value = true)
@DynamicUpdate(value = true)
public class Human {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(nullable = false, name = "name")
private String name;
@ManyToOne(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
@JoinColumn(name = "parent_id")
private Human parent;
@OneToMany(fetch=FetchType.LAZY, mappedBy ="parent")
private Collection<Human> children;
// getters and setters ...
}
Run Code Online (Sandbox Code Playgroud)
HumanDao.java
@Repository
public interface HumanDao extends CrudRepository<Human, Long>{
@Query(value =
"SELECT * " +
"FROM humans " +
"WHERE parent_id = ?1",
nativeQuery = true)
public Iterable<Human> getChildren(Long …Run Code Online (Sandbox Code Playgroud)